Понимание Git

Git - это свободная и открытая распределенная система контроля версий (DVCS).

Git был придуман создателем Linux Линусом Торвальдсом для поддержки огромной, распределенной группы разработчиков Linux. Но Git приобрел большую популярность во многом благодаря GitHub. Git существовал задолго до этого, но не получал широкого распостранения за пределами Linux-сообщества, вплоть до недавней волны популярности GitHub. GitHub позволяет вам размещать исходный код проектов не взимая платы. Он также предоставляет простой доступ и обмен опытом, что делает Git ещё проще.

Другме проекты, такие как Mac Homebrew, были внесены в состав Git. Homebrew позволяет вам устанавливать пакеты из открытых источников на Mac. Среди них инструменты для сборки и управления этими возможностями Git для инструментов различия, создания заплаток(патчей), управления ресурсами, отправка новых обновление пакетов через pull requests.

Git и другие DVCS

Два других наиболее популярных варианта DVCS - это Mercurial и Bazaar. Mercurial имеет инструмент командной строки hq(в честь химического элемента ртути), Bazaar имеет инструмент командной строки bzr.

Mercurial ассоциируется со многими открытыми проектами. Canonical, компания, которая выпускает Ubuntu Linux, использует Bazaar. Такая ситуация не является необычной для разработчиков, знакомых с Git, Mercurial и Bazaar.

Какую из DVCS использует разработчик, чаще всего продиктовано организациями, в которой работает разработчик, чем набором возможностей. Git, Mercurial и Bazaar имеют необходимую функциональность, такую как ветвление, маркировка, слияние и не зависят от центрального сервера. Разработчик, который использует Git, мог бы работать годом ранее в различных проектах под управлением Mercurial.

Ключевой задачей является изучение различий в командах и "фишек" каждого из инструментов. К примеру, hq revert в Mercurial означает отмену текущих изменений, возвращаясь к текущей версии. git revert означает добавление нового коммита, который возвращает предыдущую правку. Git имеет команду отмены изменений, как у Mercurial, но с другим названием.

Git и нераспределенные SCM

Несколько нераспределенных систем управления исходным кодом(SCM) существовали до DVCS и используются до сих пор:

  • Subversion
  • CVS (Concurrent Versions Systems)

Некоторые проприетарные системы контроля версий до сих пор интенсивно используются, к примеру:

  • Rational ClearCase
  • Perforce
  • Visual SourceSafe

Эти проприетарные продукты часто идут в комплекте с другими инструментами разработки и тем самым, они хорошо закрепились в некоторых магазинах программного обеспечения.

Ключевым фактором в этих системах, в противоположность от модели DVCS, это их зависимость от центрального сервера для хранения всех важных данных, связанных с отслеживанием версий и веток. По сути, это не встроенная функциональность для разработчика, которому нужно сделать несколько коммитов дома, не имея подключения к центральному серверу, а затем позже подключиться и добавить их на сервер. Некоторые из этих систем имеют возможность добавлять такую функциональность, но это не является их основной целью.

В качестве иллюстрации отличий между DVCS и не-DVCS SCM системами, представим двух людей, работающих независимо друг от друга, которые могут встретиться удаленно, как в круизной поездке, и обменяться коммитами при использовании DVCS. Обмененные коммиты будут иметь те же права, что и те, которые находятся на центральном сервере. Когда используется нераспределенная SCM, эти два человека могут обменяться только отличающимися кусками кода, а не коммитами. Кто-то все ещё должен опубликовать коммиты на центральном сервере, когда они придут домой и получат доступ к нему.

Неотъемлемые преимущества DVCS

Отличительное преимущество инструментов, подобным Git является то, что каждый, кто имеет копию со всем необходимым, может восстановить проект. Если центральный сервер сломается и все данные потеряются, то любая удаленная копия может стать официальной, потому что это будет достаточно для восстановления работоспособности. Единственное расхождение только возникает, когда разработчики не имеют последние коммиты.

С оригинальным текстом урока вы можете ознакомиться на spring.io.

comments powered by Disqus