Содержание


Знакомство с работой Git – и не только с командами

Git, заметки для самого себя

Comments

Git — это популярный децентрализованный репозиторий исходного кода. Его разработал Линус Торвальдс, создатель операционной системы Linux, для управления исходным кодом ядра Linux. На нем основаны целые службы, такие как GitHub. Он используется даже в IBM DevOps Services – наряду с IBM Rational Team Concert™. Так что тем, кто хочет программировать в мире Linux или использовать IBM DevOps Services с Git, будет полезно хорошее понимание Git.

Когда я начал работать с Git, я имел некоторый опыт работы с Concurrent Versions System (CVS) и Apache Subversion (SVN), поэтому я пытался освоить его с точки зрения этих классических систем хранения исходного кода. Такой подход дал мне лишь ограниченное понимание возможностей Git. С тех пор я освоил Git гораздо лучше, так что эта статья – своего рода «Заметки для самого себя», чтобы напомнить себе, как работает Git, и объяснить это всем начинающим. Я предполагаю, что вы знакомы с другими, более классическими хранилищами исходного кода, такими как CVS или SVN.

Основы

Так что давайте начнем с простого примера классического репозитория исходного кода, показанного на рисунке 1. В классическом репозитории исходного кода папка с файлами и подпапки обрабатываются как информация (content) (CVS и Git на самом деле работают не с папками, а просто с файлами по указанному пути). Все версии информации содержатся в репозитории, а рабочий каталог – это место, где работают с кодом. Из репозитория код выгружают (checkout) в рабочий каталог, а изменения, внесенные в этом рабочем каталоге, фиксируют (commit) в новой версии информации в репозитории.

Рисунок 1. Управление рабочим пространством в классическом репозитории исходного кода
Commit – загрузка в репозиторий, checkout – выгрузка
Commit – загрузка в репозиторий, checkout – выгрузка

При каждой операции фиксации создается новая версия информации, полученная из предыдущей, родительской версии в результате внесения изменений, как показано на рисунке 2. Информация хранится в виде ряда версий, также называемых снимками текущего состояния (snapshots), которые связаны отношениями «родитель-потомки» в результате операций фиксации. Информация, измененная между родительской и дочерней версиями путем фиксации, называется набором изменений.

Такая последовательность версий называется потоком или ветвью. В SVN основной поток называется стволом; в CVS он обычно носит имя HEAD; в Git его обычно называют master. Ветви используются при реализации проекта для выделения разработки конкретной функции или для поддержки старой версии.

Рисунок 2. Создание новой версии в классическом репозитории
Извлечение информации, ее изменение и фиксация
Извлечение информации, ее изменение и фиксация

Пока Git мало чем отличается от классических хранилищ исходного кода, не правда ли? К сожалению, на этом сходство заканчивается. Одна из основных особенностей CVS и SVN заключается в том, что у них есть центральный репозиторий. Git – децентрализованный репозиторий. При разработке программного обеспечения несколько репозиториев могут работать одновременно, и они так и работают, потому что репозиторий каждого разработчика действует и сообщается с другими точно так же, как любой другой Git-репозиторий на сервере.

Так как же работает Git?

Основной принцип работы Git на удивление прост – его только нужно усвоить.

Во-первых, Git манипулирует информацией в форме снимков текущего состояния, по одному на каждую фиксацию, или «коммит», и «знает», как применить набор изменений для перехода к следующему состоянию или возврата к предыдущему. Это важная концепция. По-моему, понимание идеи применения набора изменений и отката значительно упрощает освоение Git.

Это поистине основополагающий принцип. Все остальное – его следствия. Так что давайте немного углубимся в Git.

Работа с Git