О Git-ах, Hub-ах и Open Source. Как работают ключевые структуры разработки открытого ПО

В контексте волны санкций против IT-сектора России появлялась информация, что российских программистов могут отключить от репозитария GitHub. В связи с этим на самом высоком уровне выдвигалось предложение создать его отечественный аналог. Эта информация была вскоре опровергнута GitHub-сообществом, но у многих остались вопросы – что это вообще такое и почему так важно?
Что такое Git и СКВ
Линуса Торвальдса, создателя Linux, безусловно есть за что уважать. Этот человек изменил само представление о программировании, заложив основы Open Source на десятилетия вперед. И дело не только в разрушении монополии IT-корпораций на создание ключевого софта, дело в революции софтостроения. И знаменем этой революции стал Git.
Разработка ядра Linux шла с 1991 года в режиме коллективного творчества. Можно себе представить, как сложно синхронизировать изменения, вносимые в код, когда этим занимается не нанятая команда, сидящая в одном офисе и контролируемая работодателем, а множество программистов со всего мира. С 1991 по 2002 годы изменения передавались между разработчиками в виде патчей и архивов. В 2002 году проект ядра Linux начал использовать проприетарную децентрализованную СКВ BitKeeper, а после того, как ее бесплатное использование стало невозможным (это случилось в 2005-м), Линус Торвальдс разработал свою собственную утилиту – Git, которая изменила мир едва ли не больше, чем сам Linux.
Git – это одна из систем контроля версий (СКВ). То есть система, фиксирующая изменения в проекте в течение времени и позволяющая вернуться к определенному моменту работы. Даже если вы далеки от программирования, то наверняка пользовались элементарной системой СКВ, вызываемой сочетанием кнопок Ctrl (Command)+Z. Она встроена на всех десктоп-платформах и предоставляет возможность отменять действия, совершенные пользователем над файлом и возвращаться к его предыдущей версии.
Системы СКВ делятся на три больших группы.
Локальная СКВ
Простейший подход – сохранять проект на разных этапах в разные файлы, копировать их из каталога в каталог. Нужно откатить изменения? Берите более старый файл и работайте дальше ним. Примитивно и очень неудобно – особенно, если над проектом работает более одного человека. Более продвинутый метод – добавить к этому простую базу данных, которая хранит записи обо всех изменениях в файлах, осуществляя «контроль ревизий». Одна из популярных СКВ такого типа – система RCS. Она хранит на диске наборы патчей (различий между файлами) в специальном формате и может воссоздавать состояние каждого файла в заданный момент времени.
Централизованная СКВ (ЦСКВ)
Практически то же самое, но на сервере с общим доступом, который позволяет работать над проектом совместно. Довольно распространенный подход, особенно в больших IT-компаниях. Такие системы, как CVS, Subversion и Perforce, являются клиент-серверными. ЦСКВ являлось стандартом на протяжении многих лет, у него есть свои достоинства: все разработчики проекта в курсе, чем занимаются коллеги, а администраторы имеют полный контроль. Ну и вообще – гораздо проще администрировать ЦСКВ, чем локальные базы на каждом клиенте.