Git

**Git** (айтыл. "гит") — үлестірілген нұсқаларды басқару жүйесі. Жобаны Линус Торвалдс Linux өзегін басқару үшін енгізген, бірінші нұсқасы 2005 жылдың 7 сәуірінде шықты. Бүгінгі күні Джунио Хамано ()дан қолдау алады.

Git пайдаланатын жобалар мысалдарына Linux ядросын, Swift, Android, Drupal, Cairo, GNU Core Utilities, Mesa, Wine, Chromium, Compiz Fusion, FlightGear, jQuery, PHP, NASM, MediaWiki, DokuWiki, Qt және кейбір Linux дистрибутивтері (төменнен қараңыз).

Бағдарлама еркін және GNU GPL 2 нұсқасы лицензиясы астынан шығарылды.

## Мүмкіншіліктері

Жүйе бағдарламалар жиынтығы ретінде жобаланған, оларды скрипттерде пайдаланылуын ескере отырып арнайы әзірленген. Бұл Git негізінде ыңғайлы  мамандандырылған нұсқаларды бақылау жүйесін немесе пайдаланушылық интерфейстерді  жасауға мүмкіндік береді. Мысалы, Cogito дәл осындай - Git репозиторийлеріне үлгі қабық болып табылады, ал StGit түзетулер коллекцияларын (патчтарды) басқару үшін Git пайдаланады.

Git жылдам бөлу және нұсқаларын біріктіруді қолдайды, визуалдауға арналған құралдар және бейсызық әзірлеу тарихын шарлауды қамтиды. Darcs, BitKeeper, Mercurial, Bazaar және Monotone  сияқты, Git әрбір әзірлеушіге әзірлеудің бүкіл тарихының жергілікті көшірмені ұсынады, өзгертулер бір репозиторийден басқасына көшірмесі  жасалады.

Git репозиторийлеріне қашықтан қол жеткізу git-daemon, SSH- немесе HTTP-сервер арқылы қамтамасыз етіледі. git-daemon TCP-сервисі Git дистрибутивіне кіреді және SSHбен қатар, ең көп тараған және сенімді қол жеткізу әдісі болып табылады. HTTP әдісі бойынша қатынау бірқатар шектеулерге қарамастан, бақыланатын желілерде өте танымал болып табылады, өйткені қолда бар желілік сүзгілер конфигурациясын пайдалануға мүмкіндік береді.

## Іске асыру ерекшеліктері
Ядро Git жиынтығы утилит командалық жолдың параметрлері. Барлық параметрлері сақталады мәтіндік файлдарда конфигурациясы. Мұндай іске асыру ж / е Git оңай портируемым кез-келген платформа мүмкіндік береді оңай біріктіруге Git басқа жүйелер (атап айтқанда, құруға, графикалық git-клиенттер кез келген қалаулы интерфейсі).

Репозиторийі Git каталогы файлдық жүйе орналасқан файлдар конфигурациялық репозиториясы, файлдар, журналдар, сақтайтын орындайтын операциялар үстінен репозиторием, индексі сипаттайтын файл орналасуы мен қоймасы бар жеке файлдар. Құрылымы қоймасының файлдарын көрсетеді емес, нақты құрылымы сақталып репозиторийін файлдық ағашы, ол жоғарылатуға жылдамдығын операцияларды орындауды репозиторием. Кезде ядро өңдейді командасын өзгерту (ол маңызды емес, кезінде жергілікті өзгерістер немесе алған кезде патча басқа торабының), ол жасайды жаңа файлдар қоймасы, тиісті жаңа состояниям өзгертілген файлдар. Айтарлықтай, бұл ешқандай операция өзгертпейді мазмұнды қолданыстағы қоймада файл.

Әдепкі бойынша репозиторийі сақталады подкаталоге ".git" түбірлік каталогында ұстап жұмыс көшірмелері ағаш файлдар сақталатын репозиторийін. Кез келген ақпаратты беру тәсілі файлдық ағашы жүйесінде айналдыруға болады репозиторийі git беріп командасын құру репозиториясы келген түбірлік каталогына бұл ағаштың (немесе көрсетіп түбірлік каталог параметрлері бағдарламасы). Репозиторийі мүмкін импортталған басқа торап, қол жетімді желі. Импорттау кезінде жаңа репозиториясы автоматты түрде құрылады және жұмыс көшірмесі, тиісті соңғы зафиксированному жағдай импортталатын репозиториясы (яғни дәптерлерінің көшірмелері жасалады өзгеріс жұмыс көшірмелері бастапқы торабының, оның ішінде торабында орындалмады командасы commit).

## Сәулет
Төменгі деңгейі git болып т. ғ. к. файлдық жүйе жолданған ішіндегісі бойынша (content-addressed file system). Құрал командалық жолдың `git` құрамында бірқатар команда бойынша тікелей манипуляциялар осы репозиторием төмен деңгейде. Бұл командалар қажет емес, қалыпты жұмыс git ретінде бақылау жүйесімен нұсқалары, бірақ қажет іске асыру үшін күрделі операцияларды (жөндеу, бүлінген репозиториясы және т. б.), сондай-ақ мүмкіндік береді базасында құру репозиториясы git қандай да бір өз-қосымша.

Әрбір объект репозиторийін тасымайтын, SHA-1 хеш, және ол айналады атымен файлдың осы объектіге директорияның .git/objects. Жұмысты оңтайландыру үшін файл жүйелерімен, пайдаланатын ағаштар үшін, қалталарды шолыңыз, бірінші байт хеша айналады атымен поддиректории, ал қалғандары — файл атымен, онда санын азайтады файлдарды бір директорияның (шектейтін фактор өнімділігінің осындай ескірген файлдық жүйелерде).

Барлық сілтемелер объектілері репозиториясы сілтемелер қоса алғанда, объект орналасқан ішіндегі басқа объекті болып табылады SHA-1 хешами.

Сонымен қатар, репозиторийін бар директориясы refs мүмкіндік береді қою оқылатын адам аттары қандай да бір объектілерді git. Топтарда git екі түрі де сілтеме — оқылатын адам refs және нижележащие SHA-1 — толық бірін-бірі алмастырады.

Классикалық әдеттегі сценарий репозиторийін git бар үш нысан түрі — файл, ағаштар және коммит. Файл бар болса, онда бұл нұсқа болса, онда пайдаланушы файлды, ағаш жиынтығы файлдар түрлі поддиректорий, коммит — ағаш + әлдебір қосымша ақпарат (мысалы, ата-ана(е) коммит(лар), сондай-ақ пікір).

"Репозиторийін кейде жүргізіледі жинау, қоқыс, ескірген файлдарды ауыстырылады "аңғарды" олардың арасындағы өзекті файл (дәл солай! өзекті нұсқасы файл сақталады-инкрементально, инкременты үшін ғана пайдаланылады шагания бұрын), одан кейін деректер "аңғарды" қалыптасып, бір үлкен файл, оған құрылады индексі. Бұл төмендетеді талаптар жері бойынша диск.

Репозиторийі git кейде жергілікті және қашықтағы. Жергілікті репозиторийі — бұл поддиректория .git құрылады (бос күйінде) командасымен git init және (непустом түрде дереу көшіруді мазмұн ата-аналар қашықтан репозиториясы және қоюмен сілтемелер ата-анасының) командасымен git clone.

Іс жүзінде барлық жай операциялар бақылау жүйесімен нұсқалары сияқты коммит және біріктіру ғана жүргізіледі, жергілікті репозиторием. Қашықтан репозиторийі тек синхрондау, жергілікті "жоғары" (push), сондай-ақ "төмен" (pull).

Болуы толығымен барлығы репозиториясы жобаны жергілікті әрбір әзірлеуші береді git алдында бірқатар артықшылықтар SVN. Сонымен, мысалы, барлық операциялар сонымен push және pull, жүзеге асыруға болады жағдайда Интернет-қосылыс.

Өте қуатты мүмкіндігімен git болып табылады бұтақтары, сатылған қайда толық, SVN. Жаңа бұтағы сияқты оңай жасауға және коммит. Шын мәнінде, бұтағы git бар аспайтын көп оқылғандар адам аты, "навешенное" әлдебір коммит " репозиторийін (пайдаланылады поддиректория refs). Коммит құрмай, жаңа бұтақтары ғана передвигает сілтемені өзіне, ал коммит құрумен бұтақтары қалдырады ескі сілтемені орнында, бірақ жасайды жаңа жаңа коммит, және оның ағымдағы жариялайды. Деген жергілікті девелоперлік файлдарды файлдар жинағы өзге бұтағы, сол арқылы ауыса отырып, онда — сондай-ақ, соншалықты болмашы нәрсе бұл.

Команда push деп хабарлайды  барлық жаңа деректер (сол жоқ қашықтағы репозиторийін) жергілікті репозиториясы " репозиторийі алыстан. Орындау үшін осы команданың қажет қашықтағы репозиторийі болмаған жаңа коммитов-өзіне басқа да клиенттер, әйтпесе push аяқталады қате, және істеу керек pull және біріктіру.

Команда pull — обратна командасы push. Егер бір бұтағы бар тәуелсіз даму тарихы қандай-онда сәттен жергілікті және қашықтан көшірмелері, pull дереу ауысады біріктіру.

Біріктіру шегінде әр түрлі файлдар автоматты түрде жүзеге асырылады (бұл мінез-құлқы теңшеледі), ал бір файлдың стандартты трехпанельным салыстыра отырып файлдар. Кейін бірігу керек жариялауға қақтығыстар ретінде рұқсат етілген.

Сонымен бірігу, git қолдайды және rebase. Бұл операция бар алу жиынтығының барлық өзгерістер бұтақтары Ал, кейіннен оларды "накатом" бұтағы B. нәтижесінде бұтағы B жылжып дейінгі жай-күйін AB. Айырмашылығы бірігу, тарих бұтағы AB қалмайды ешқандай аралық коммитов бұтақтары A (тек қазақстан тарихы тармағының (B) және жазу туралы ең rebase, бұл біріктіруді жеңілдетеді, ірі және өте ірі жобаларды).

Сондай-ақ, git бар уақытша оқшау индексі файлдар. Бұл — аралық қоймасы арасындағы жеке файлдармен және кезекті коммитом (коммит жасалады, тек осы индексінің). Көмегімен осы индексінің жүзеге асырылады қосу жаңа файл (git add қосады, оларды индексі, олар түсіп келесі коммит), сондай-ақ коммит БАРЛЫҚ өзгертілген файл (коммит жасалады ғана файлдарға, олар жасалды git add). Кейін git add редакциялауға болады файл бұдан әрі-аналардан үш көшірмесі бір файлдың соңғы индексінде (та бар екенін, осы кезде git add), және соңғы коммите.

Аты бұтақтары әдепкі бойынша: master.

Аты алыстан репозиториясы әдепкі бойынша, құрылатын git clone кезінде типтік операциялар "взять қолда бар жоба болса, онда сервер өзіне машинаға": origin.

Осылайша, жергілікті репозиторийін әрқашан бар бұтағы master, ол бар, соңғы жергілікті коммит, бұтағы origin/master, ол бар соңғы күйін қашықтықтан репозиториясы кезінде орындауды аяқтаудың соңғы команда pull немесе push.

Команда fetch (ішінара pull) — берет отырып, қашықтағы сервер барлық өзгерістер origin/master және санаққа оларды жергілікті репозиторийі ілгерілете отырып, белгісін origin/master.

Егер осыдан кейін master және origin/master тарады тараптар, қажет қосу, орнатып master нәтиже бірігу (команда pull бар fetch+merge). Бұдан әрі мүмкін жасауға push жіберіп, нәтижесі қосылу керек және анықтай отырып, оған origin/master.

## Windows-те іске асыру туралы толығырақ
Windows нұсқасы (ресми Windows-нұсқасы деп аталады mSysGit) пайдаланылады пакет mSys — қамтамасыз эмулятор POSIX-үйлесімді командалық жолдың үстінде Windows (туынды жылғы MinGW, шамамен баламасы Cygwin).

Астында mSys ауыстырылды барлық қажетті git кітапхана мен құралдары, сондай-ақ өзі git.

Жұмыс кезінде алыстағы репозиториями бойынша хаттама SSL пайдаланылатын болады қоймасы сертификаттардың mSys емес, Windows.

Бар көптеген графикалық қабықшалар үшін Git, мысалы, TortoiseGit. Барлық олар жүзеге асырылды арқылы сын mSysGit талап етеді, оны орнату машинаға. Ерекшелік емес және SourceTree компанияның шешімі Atlassian, бірақ mSysGit ол құрамында өз ішінде, өз артықшылықтары мен кемшіліктері (орнату терең поддиректорию қиындатады қосу mSys қажетті SSL-сертификаттар).

## Желілік мүмкіндіктерін және серверлік шешімдер
git пайдаланады желісі үшін ғана операцияларды алмасу алыстағы репозиториями.

Пайдаланылуы мүмкін келесі хаттамалар:
* git:// ашылған хаттамасы талап ететін болуы, серверде іске қосылған демона (жеткізіледі бірге git). Хаттама жоқ аутентификация құралдарын пайдаланушылар.
* ssh:// Пайдаланады сәйкестендіру пайдаланушылар көмегімен жұп кілт, сондай-ақ ендірілген UNIX-жүйесі "негізгі" SSH-сервер (sshd). Тарапынан сервер құру талап етіледі аккаунттардың шеллом олар бір команда git.
* http(s)://. Пайдаланады өз ішіндегі құрал curl (Windows бірге жеткізіледі git), және оның мүмкіндіктері HTTP аутентификация және оны қолдау үшін SSL сертификаттары.
Соңғы жағдайда қажет болуы серверінде қазанның БОЙЫНША веб-қосымшалар, ол орындауға рөлі дәнекерден командалары арасында git серверінде және HTTP-сервер. Мұндай дәнекерден бар сияқты, Linux және Windows (мысалы, WebGitNet әзірленген ASP.NET MVC 4).

Сонымен қолдау серверлік тараптар команда push және pull, мұндай веб-қосымшалар, сондай-ақ мүмкін беруге қол жеткізу тек қана оқу - репозиторию веб-браузер арқылы.

## Артықшылықтары мен кемшіліктері
Артықшылықтары мен кемшіліктері git салыстырғанда орталықтандырылған басқару жүйесімен нұсқаларының (мысалы, мысалы, Subversion) тән кез келген тарату жүйесі және сипатталған-бапта "басқару Жүйесі нұсқаларының". Егер салыстыратын болсақ git "туыстық" оған бөлінген жүйелерімен, бұл git бастапқыда идеологиялық бағытталған жұмысты өзгерту емес, файлдармен, "бірлік өңдеу үшін оған болып табылады жиынтығы өзгерістер, немесе патч. Бұл ерекшелік байқалады құрылымында жүйенің (атап айтқанда — құрылымында репозиториясы), сондай-ақ құру принциптері командалары; ол өнімділігін көрініс жүйесінің әр түрлі нұсқада пайдалану және артықшылықтары мен кемшіліктері git салыстырғанда басқа DVCS.

Жиі деп аталатын артықшылықтары git басқа DVCS:
* Жоғары өнімділік.
* Дамыған экономикалық басқа [//ru.wikipedia.org/wiki/VCS символына vcs], атап айтқанда, [//ru.wikipedia.org/wiki/CVS CVS], [//ru.wikipedia.org/wiki/SVN SVN] және [//ru.wikipedia.org/wiki/Mercurial Mercurial]. Басқа бағыттағы конвертерлер репозиторий қорына, қолда бар жиынтықтағы бағдарламалық құралдар мүмкіндік әзірлеушілерге пайдалануға git орналастыру кезінде орталық репозиториясы " SVN немесе CVS, сонымен қатар, git мүмкін имитировать cvs-сервер қамтамасыз ете отырып, арқылы клиенттік қосымшалар және қолдау орталарда әзірлеу, арнайы қолдайтын git.
* Ойластырылған командалар жүйесі, мүмкіндік беретін ыңғайлы встраивать git " скриптілер.
* Сапалы веб-интерфейс "қораптар".
* Репозиторийін git қолданылуы мүмкін және жаңартылуы общесистемными файл утилитами мұрағаттау және жаңарту сияқты [//ru.wikipedia.org/wiki/Rsync rsync], арқасында, тіркеу және өзгерістер синхрондау өзгертпейді қазіргі бар файлдар ғана емес, оған жаңа (қоспағанда кейбір қызметтік файлдар, мүмкін автоматты түрде жаңартылады көмегімен құрамындағы қолда бар жүйесін утилит). Тарату үшін репозиториясы желісі бойынша жеткілікті кез-келген веб-сервер.

* Болмауы өтпелі нөмірлеу коммитов монотонно үздіксіз дамитын бүтін сандар. Көптеген жобаларда пайдаланылады автоматты түрде алу нөмірлері осы нұсқасы (мысалы, команда svnversion) құру .H-файлдың негізінде осы саннан және одан әрі оны пайдалану құру кезінде мөртабан нұсқасы орындалатын файл, кейбір вшитых оған жолдарының және сондықтан бұдан әрі.
* Болмауы переносимой басқа операциялық жүйелер қолдау жолдарын кодтау Unicode Microsoft Windows *үшін нұсқалары msysgit дейін 1.8.1)*. Егер жолы құрамында рәміздер ерекшеленетін, ANSI, онда оларды қолдау пәрмен жолынан талап етеді ерекше параметрлерін, кепілдік береді дұрыс бейнелеу файл аттарын пайдалану кезінде сол репозиторием басқа ОС. Тәсілдерінің бірі проблемасын шешу үшін git 1.7 пайдалану болып табылады арнайы пропатченного консольного клиенттің. Тағы бір нұсқа — пайдалану графикалық утилит жұмыс істейтін тікелей арқылы APIсияқты TortoiseGit.
* Біраз қолайсыздықтар үшін пайдаланушылардың, ауыспалы басқа символына vcs. Команда git бағдарланған жиынтықтары өзгерістер емес, файлдар, тудыруы мүмкін недоумение пайдаланушылардың, привыкших - файл-бағдарланған символына vcs сияқты SVN. Мысалы, команда "add", ол көп жағдайда басқару жүйесінің нұсқаларының жүргізеді қосу файл жобасына, git дайындайды тіркеу жасалған файлдарда өзгерістер. Бұл ретте сақталады емес, патч, сипаттайтын өзгерістер, жаңа нұсқа мақсатты файл.
* Пайдалану сәйкестендіру үшін ревизия хешей SHA1, қажеттілігіне алып келуін ұзын жолдармен орнына қысқа нөмірлерді нұсқаларын, көптеген басқа жүйелерінде (алайда командаларда пайдалануға толық емес хеш-жол).
* Үлкен үстеме шығыстар жұмыс кезінде жобалары жасалады, көптеген байланыссыз бір-бірімен өзгерту файлдар. Жұмыс кезінде мұндай режимде өлшемдері жиынтығын өзгерістер болуда жеткілікті және жылдам жүреді көлемінің өсуі репозиторий қорына.
* Үлкен шығындар уақыты, салыстырғанда файл-бағдарлы жүйелер, қалыптастыру, тарих нақты файлды, тарих правок нақты пайдаланушы үшін, іздеу өзгерістер жататын, берілген орны, белгілі бір файл.
* Болмауы жеке команданың атауын өзгерту/жылжыту файлы, отображалась еді тарих ретінде тиісті бірыңғай қолданысқа енгізіледі. Қазіргі скрипт git mv іс жүзінде орындайды, атын өзгерту, файлды көшіру және жою, оны ескі орны, талап арнайы талдау анықтау үшін, бұл шын мәнінде файл жай ғана кейінге қалдырылды (бұл талдау автоматты түрде орындалады командалар тарихын қарау). Алайда, фактіні ескере отырып, болуы арнайы командалар атауын өзгерту/жылжыту файлдар техникалық мәжбүрлейді пайдаланушының пайдалану, оның (және, соның салдары ретінде, бұл жағдайда болуы мүмкін алшақтықты тарихы), мінез-git болып саналуы мүмкін артықшылығы.
* Жүйе жұмыс істейді, тек файлдармен және олардың мазмұнды және қадағалайды бос каталогтар.
Бірқатар басылымдар жататын артықшылықпен 2005-2008 жылдар кездестіруге болады сондай-ақ, ашуын қатысты құжаттама git, болмаған ыңғайлы windows-нұсқасы және ыңғайлы графикалық клиенттер. Қазіргі уақытта бұл сын неактуальна: бар нұсқа git негізінде MinGW ("туған құрастыру" Windows"), және бірнеше жоғары сапалы графикалық клиенттердің әр түрлі операциялық жүйелер, атап айтқанда, Windows бар клиент TortoiseGit, идеологиялық өте жақын, кеңінен таратылған TortoiseSVN — клиентке SVN, встраиваемому " қабықшасына Windows.

## Графикалық интерфейстер
* GitKraken — кросс-платформалы тегін клиенттік Git.
* SmartGit — Java-да Git үшін кросс-платформалы интерфейс.
* gitk — Tcl/Tk жазылған жеңіл және тез бағдарлама, Git өзі таратады.
* QGit, Qt пайдалана жазылған интерфейс , Ол көп жағдайда gitk ұқсас, бірақ біршама басқаша жиынтық ерекшеліктері бар. Қазіргі уақытта, Qt3 және Qt4да жүзеге асырулары бар.
* Giggle — Gtk+ арналған вариант.
* gitg — gtk+/GNOME үшін тағы бір интерфейс
* Git Extensions — .NET бойынша кросс-платформалы вариант.
* TortoiseGit — Windows Explorer кеңейту ретінде іске интерфейс.
* SourceTree — Windows және Mac тегін Git клиент.
* Git-cola  — Python кросс-платформалы интерфейс.
* GitX — Cocoa интерфейсімен Mac OS X орауыш, gitk интерфейсімен ұқсас.
* Gitti  — Cocoa интерфейсімен Mac OS X орауыш.
* Gitbox  — Cocoa интерфейсімен Mac OS X орауыш.
* Github-клиент
* StGit — Python жазылған патчтар жинағын басқару жүйесі (Catalin Marinas)
* GitTower — Mac және Windowsке арналған коммерциялық Git клиент.

### Web үшін фронтендтері

## Басқа нұсқаларды бақылау жүйелермен өзгерістермен алмасу
* CVS — импорт және экспорттау, стандартты жеткізуде CVS-серверін эмуляциялау
* Subversion — импорт және экспорт (ішінара), стандартты жеткізу
* .tar.gz, .tar.bz2 (версияланған файлдар сериялары) — импорт және экспорт, стандартты жеткізу

## Дереккөздер

## Сондай-ақ,
Басқа үлестірілген нұсқаларды басқару жүйесі:
* Mercurial
* Bazaar
* Darcs
git-репозиторийлер  үшін хостинг ұсынатын қызметтер:
* GitHub
* Codebase
* SourceForge
* Gitorious
* Google Code
* Bitbucket

## Сілтемелер
* Домашняя страница Git(ағылш.)
* Линус Торвальдс о git (орыс.) (YouTube)
* Десять лет Git: интервью с создателем — Линус Торвальдс 
* Интерактивный тур Git How To(орыс.)
* Руководство пользователя GIT  (орыс.)
* Git User’s Manual  (ағылш.) (также распространяется вместе с исходным текстом программы: `Documentation/user-manual.txt`)
* Страница Git на kernel.org(ағылш.)
* Everyday Git (ағылш.) («Git на каждый день») — набор из примерно 20 команд (на самом деле их будет около 5-6), которые пригодятся в повседневном использовании системы.
* Linus Torvalds on Git(ағылш.) — рассказ Линуса Торвальдса о git и других системах контроля версий (YouTube)
* Randal Schwartz on Git(ағылш.) — рассказ Рэндела Шварца о git (YouTube)
* Contributing with Git(ағылш.) — Google Talks 27.10.2008 (YouTube)
* GitCasts.com(ағылш.) — сайт, посвящённый скринкастам по использованию git.
* Сравнение Git и Mercurial в FAQ сайта Google Code(ағылш.)
* C#-реализация Git — системы контроля версий для .NET и Mono(ағылш.)
* Учебник Pro Git на русском языке (Creative Commons Attribution-Non Commercial-Share Alike 3.0 license).
* Git на пальцах(орыс.)
* Удачная модель ветвления для Git(орыс.)
* Git — наглядная справка (орыс.)

Санат:Алфавит бойынша программалық жасақтамалар