7 апреля система контроля версий Git отметила 15-летие. Решение, разработанное легендарным Линусом Торвальдсом, используют миллионы разработчиков по всему миру. Рассказываем, как создавалась система и почему она так популярна.
Что такое Git
Git – это распределенная система контроля версий, которая позволяет отслеживать историю разработки ПО и совместно работать над сложными проектами из любой точки мира.
Git – решение с открытым исходным кодом, распространяется под лицензией GNU GPL версии 2.
Торвальдс создавал Git для управления разработкой ядра Linux. Ранее он использовал систему BitKeeper, но из-за конфликта с создателями Торвальдс задумался о запуске собственного продукта с открытым исходным кодом.
Первую версию Git представили 7 апреля 2005 года. Базовый релиз собрали за пять дней, а 16 июня 2005 года разработку Linux полностью перевели на Git. Самый свежий релиз на сегодняшний день – 2.26.0, который вышел 22 марта 2020 года.
Команду поддержки Git сегодня возглавляет Джунио Хамано. Собственно, Торвальдс снял с себя обязанности ведущего разработчика проекта 25 июля 2005 года, меньше чем через три месяца после первого релиза Git.
Git используют лидеры ИТ-рынка. Систему контроля версий по-прежнему задействуют для разработки ядра Linux и ряда дистрибутивов этой ОС, а также Android, Swift, Drupal, Chromium, jQuery, PHP, MediaWiki, Qt и др.
Доля Git среди других систем контроля версий постоянно растет:
- в 2010 году на Git работало 11,3% репозиториев против 60,8% у SVN (Subversion);
- в 2017-м доли сравнялись;
- на текущий момент на Git построено 71% всех репозиториев кода, и он продолжает захватывать позиции.
«Линия времени» Git. Источник: блог GitLab
Интересный факт: git в переводе с английского означает «мерзавец». Торвальдс саркастически признался, что считает себя тем еще эгоистом, поэтому называет проекты в свою честь: сначала Linux, потом Git.
Особенности Git
В Git снимки состояний системы сохраняются в репозитории кода в виде коммитов. Каждый коммит может принадлежать одной или нескольким веткам.
Основная ветка обычно носит название master, в ней принято хранить полностью рабочий код. Новую ветку можно создать из любого коммита. Сделанные изменения вместе с ранее разработанным кодом станут еще одной версией программы. Выглядеть это может так:
Ветки можно объединять (например, чтобы добавить сделанные изменения в основную версию продукта). Есть возможность переноса изменений из одной ветки в другую, обсуждения, создания запросов на изменения в определенной ветке и т.д.
Каждый разработчик может создать для себя локальную копию всей истории разработки и взаимодействовать с ней. Свои изменения он сможет отправить в удалённый репозиторий при наличии соответствующих прав. Другие разработчики получат доступ к этим изменениям, загрузив их с сервера по протоколам SSH или HTTP.
Собственно, ядро Git – это комплект утилит командной строки. Настройки хранятся в конфигурационных файлах, которые можно менять в текстовом редакторе. Также есть графические оболочки для Git под десктопные ОС, а с недавнего времени – и мобильное приложение для популярного хостинга Git-репозиториев GitHub.
Преимущества и недостатки
Главное преимущество Git – в том, что он очень быстрый и прозрачный. Он удобен для нелинейной разработки и эффективен как для небольших проектов, так и для огромных систем с тысячами участников.
В отличие от Perforce, CVS и других, Git хранит снимки репозиториев, а не списки изменений в файлах, и за счет этого работает гораздо быстрее. К тому же Git – распределенная система. Если сервер с удаленным репозиторием выйдет из строя, вы можете восстановить код из локальной копии. Если ваша локальная копия пострадает, сможете загрузить код с сервера за несколько минут.
Недостатком «чистого» Git считают отсутствие средств проверки подлинности и аутентификации пользователей. Фактически каждый пользователь, который получает копию репозитория, может делать с ней все, что угодно.
К счастью, хостинги репозиториев решают эту проблему. Они позволяют настроить систему прав и тем самым защитить код от несанкционированного использования или редактирования.