Git (софтуер)

от Уикипедия, свободната енциклопедия
(пренасочване от Git)
Направо към: навигация, търсене
Git
Git-logo.svg
Информация
Разработчик Линус Торвалдс, Джунио Хамано, и други
Последна версия 1.8.3.4
Програмен език C, Perl
Операционна система POSIX, Linux, Windows, BSD
Вид софтуер Управление на версии
Лиценз GPL
Уебсайт http://git-scm.com/
Git в Общомедия

Git (произнася се "гит") е децентрализирана система за контрол на версиите на файлове. Създадена е от Линус Торвалдс за управление на разработката на Linux. Поради нуждата да се контролира огромната база от код на Linux ядрото, основна цел при разработката на Git е била бързината. В момента Git се разработва от Джунио Хамано.

Всяка локална Git директория е хранилище с пълна история и възможности за следене на версиите. Това прави Git независим от мрежови връзки към централен сървър.

Git е свободен софтуер и се разпространява под GPL лиценз версия 2.

История[редактиране | edit source]

Разработката на Git започва след като много от разработчиците на Линукс ядрото преустановяват използването на BitKeeper - тогавашният избор за система за контрол на версиите.

В търсенето си на алтернатива на BitKeeper, Торвалдс не намира свободна система, която да посреща изискванията му. Едно от главните му изсквания е бързодействието. Той дава пример как за да промени малко парче от код, на съществуващ проект, му отнема тридесет секунди. Това обаче е много за проекти с мащаба на Линукс ядрото, където подобни промени се случват от порядъка на 250 пъти.[1] Други водещи критерии в избора му са:

  1. CVS е пример как да не се правят нещата.
  2. Децентрализиране контрола на версиите, по пример на BitKeeper.
  3. Твърди мерки против грешки, както случайни, така и преднамерени.[2]

По онова време само Monotone отговаря на изискванията му, но като се вземе предвид желанието на Торвалдс за по-добра производителност и тази система за контрол на версиите отпада. Той решава непосредствено след завършване на 2.6.12-rc2 ядрото да се отдаде изцяло на разработването на Git.[2]

Изборът на името Git не е много ясен и има различни версии защо точно така Торвалдс е избрал да нарече проекта си. В жаргон на Английски git означава "неприятен човек". Линус се шегува, че понеже е егоцентричен обича да кръщава проектите на себе си.[3]

Торвалдс преотстъпва разработването на 26 Юли 2005 на Джунио Хамано.

Дизайн[редактиране | edit source]

Гит до голяма степен е вдъхновен от BitKeeper и Monotone. Дизайнът е силно повлиян от опитът на Торвалдс с файлови системи.[4] Първоначалният му замисъл е да създаде платформа от ниско ниво за система за контрол на версиите и върху нея да бъдат създавани инструменти като Cogito и StGIT. В процесът на разработка обаче гит се превръща в самостоятелна система за контрол на версиите, която може да се използва директно.

Структури от данни[редактиране | edit source]

Гит използва два вида структури от данни:

.Цикъл на разработване на проект.
  1. Индекс (познат още като stage или cache), който следи промените между работната директория и предстоящата версия за предаване. Структурата е променлива.
  2. База от обекти, които не могат да бъдат променяни. Към нея може само да се прибавят нови обекти и те биват четири вида:
  • Обект от тип blob, е съдържанието на файл. Обектът не се ангажира да пази метадата подобно на файловете.
  • Обект от тип tree, е еквивалентът на директория. Съдържа списък от имена на файлове и съответстващия му blob или друг tree обект описващ под-директория. Представлява моментното състояние на проекта.
  • Обект от тип commit, свързва tree обекти за да формира история на промените. Съдържа името на tree обекта, време на промяната, съобщение описващо промяната и имената на предишните обекти от тип commit, ако има такива.
  • Обект от тип tag, е контейнер за препратки към друг обект и може да съдържа допълнителна метада свързана с друг обект.

Индексът служи като свръзка между базата с обекти и работната директория.

Всеки обект е уникално идентифицира със SHA-1 хеш на съдържанието му. Гит изчислява този хеш и го използва за име на обекта. Обектът се поставя в директорията отговаряща на първите два символа на хеша. Остатъкът се използва за име на самият обект.

Гит съдържа всяка версия на файл като уникален обект от тип blob. Връзката между тези обекти може да бъде като се разглеждат tree и commit обектите. Нововъведените обекти се съхраняват компресирани, но тъй като се компресират всеки сам по себе си това може да доведе до използване на много дисково пространство. За да се избегне това обектите могат да се комбинират в пакети, които използват делта компресия.

Характеристики[редактиране | edit source]

Силно застъпена поддръжка на нелинейно разработване
Гит поддържа бързо разклоняване и сливане, както и необходимите инструменти за визуализиране и навигация в нелинейна история на промените. Разклоненията в гит са просто връзка до един commit. Този commit от своя страна има родител и може да бъде пресъздадена цялата структура.
Разпределено разработване
Подобно на други системи за контрол на версиите, гит дава на всеки разработчик локално копие на цялата история на проекта. Промените се копират от едно такова хранилище до друго и се третират като допълнителни разклонения, които могат да се сливат също както локалните разклонения.
Съвместимост със съществуващи протоколи
Хранилищата могат да бъдат създавани чрез HTTP, FTP, rsync, SSH или гит протокол. Гит може също така да емулира CVS сървър. Subversion може да се използва директно благодарение на git-svn командата.
Ефикасно справяне с големи проекти
По думите на Торвалдс гит е много бърз, без значение от мащаба[5]. Тестове направени от Mozilla показват, че гит е няколко порядъка по-бърз в сравнение с някои системи за контрол на версиите.[6]
Криптографска проверка на историята
Историята в Гит се записва по такъв начин, че идентификацията на определена версия зависи от всички предишни версии. Структурата наподобява хеширано дърво, но с допълнителна информация към разклоненията и листата.[7]

Главни действия[редактиране | edit source]

Създаване и участие в проекти[редактиране | edit source]

init
Използва се за първоначално инициализиране на проект. Проектът се създава в текущата директория.
clone
Използва се за сваляне на съществуващ проект.

Основни[редактиране | edit source]

add
Използва се за първоначално добавяне на файлове към проекта или тяхното променяне.
status
Използва се за проверка на състоянието на проекта и файловете в текущото разклонение.
diff
Използва се за визуализиране на промените във файловете, които не са записани в индекса (unstaged).
commit
Използва се за записване на промените в дървовидната структура commit.
reset
Използва се за изваждане на файлове от индекса (unstaging) с цел да не влязат в следващият commit.
rm
Използва се за перманентно премахване на файл от индекса.
stash
Използва се за запазване моментното състояние на индекса с цел да се довърши по:късно и връща състоянието на последния commit.

Разклоняване и сливане[редактиране | edit source]

branch
Изброява, създава и управлява разклоненията на проекта.
checkout
Сменя временният контекст(branch), в който се работи
merge
Използва се за сливане на разклонения.
log
Използва се за проследяване историята на промените в проекта.
tag
Използва се за отбелязване на commit, който трябва да се отличава от другите.

Споделяне и актуализиране[редактиране | edit source]

fetch
Използва се за сваляне на нова разклонения от отдалечени хранилища
pull
Използва се за сваляне на промените от отдалечено хранилище и се прави опит да се слеят заедно с локалното
push
Качва промените на отдалечено хранилище.
remote
Изброява, добавя и премахва псевдоними на отдалечени хранилища.

Външни препратки[редактиране | edit source]

Източници[редактиране | edit source]

  1. Torvalds, Linus. Re: Kernel SCM saga... // 2005-04-07. "So I'm writing some scripts to try to track things a whole lot faster."
  2. а б Linus Torvalds. (2007-05-03). „Google tech talk: Linus Torvalds on git“. Event occurs at 02:30. http://www.youtube.com/watch?v=4XpnKHJAok8. Посетен 2007-05-16. 
  3. GitFaq: Why the 'git' name?. // Git.or.cz. Посетен на 2012-07-14."I'm an egotistical bastard, and I name all my projects after myself. First 'Linux', now 'Git'"
  4. Torvalds, Linus. Re: more git updates.... // 2005-04-10.
  5. Torvalds, Linus. Re: VCS comparison table. // 2006-10-19.
  6. Dreier, Roland. Oh what a relief it is. // 2006-11-13., observing that "git log" is 100x faster than "svn log" because the latter has to contact a remote server.
  7. Trust. // Git Concepts. Git User's Manual, 2006-10-18.