Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 11 additions & 11 deletions book/01-introduction/sections/about-version-control.asc
Original file line number Diff line number Diff line change
Expand Up @@ -7,30 +7,30 @@

Если вы графический или web-дизайнер и хотите сохранить каждую версию изображения или макета (скорее всего, захотите), система контроля версий (далее VCS) -- как раз то, что нужно.
Она позволяет вернуть файлы к состоянию, в котором они были до изменений, вернуть проект к исходному состоянию, увидеть изменения, увидеть, кто последний менял что-то и вызвал проблему, кто поставил задачу и когда и многое другое.
Использование VCS также значит в целом, что, если вы сломали что-то или потеряли файлы, вы спокойно можете всё исправить.
Использование VCS также значит, в целом, что если вы сломали что-то или потеряли файлы, то спокойно можете всё исправить.
В дополнение ко всему вы получите всё это без каких-либо дополнительных усилий.

==== Локальные системы контроля версий

(((контроль версий,локальный)))
Многие люди в качестве метода контроля версий применяют копирование файлов в отдельный каталог (возможно даже, каталог с отметкой по времени, если они достаточно сообразительны).
Данный подход очень распространён из-за его простоты, однако он невероятно сильно подвержен появлению ошибок.
Можно легко забыть в каком каталоге вы находитесь и случайно изменить не тот файл или скопировать не те файлы, которые вы хотели.
Можно легко забыть, в каком каталоге вы находитесь, и случайно изменить не тот файл или скопировать не те файлы, которые вы хотели.

Для того, чтобы решить эту проблему, программисты давным-давно разработали локальные VCS с простой базой данных, которая хранит записи о всех изменениях в файлах, осуществляя тем самым контроль ревизий.
Для того чтобы решить эту проблему, программисты давным-давно разработали локальные VCS с простой базой данных, которая хранит записи о всех изменениях в файлах, осуществляя тем самым контроль версий.

.Локальный контроль версий
image::images/local.png["Диаграмма локального контроля версий"]

Одной из популярных VCS была система RCS, которая и сегодня распространяется со многими компьютерами.
https://www.gnu.org/software/rcs/[RCS^] хранит на диске наборы патчей (различий между файлами) в специальном формате, применяя которые она может воссоздавать состояние каждого файла в заданный момент времени.
https://www.gnu.org/software/rcs/[RCS^] хранит на диске наборы патчей (различий между файлами) в специальном формате, применяя которые, она может воссоздавать состояние каждого файла в заданный момент времени.

==== Централизованные системы контроля версий

(((контроль версий,централизованный)))
Следующая серьёзная проблема, с которой сталкиваются люди, -- это необходимость взаимодействовать с другими разработчиками.
Для того, чтобы разобраться с ней, были разработаны централизованные системы контроля версий (Centralized Version Control System, далее CVCS).
Такие системы, как CVS, Subversion и Perforce, используют единственный сервер, содержащий все версии файлов, и некоторое количество клиентов, которые получают файлы из этого централизованного хранилища. (((CVS)))(((Subversion)))(((Perforce)))
Для того чтобы разобраться с ней, были разработаны централизованные системы контроля версий (Centralized Version Control System, далее CVCS).
Такие системы как CVS, Subversion и Perforce используют единственный сервер, содержащий все версии файлов, и некоторое количество клиентов, которые получают файлы из этого централизованного хранилища. (((CVS)))(((Subversion)))(((Perforce)))
Применение CVCS являлось стандартом на протяжении многих лет.

.Централизованный контроль версий
Expand All @@ -42,20 +42,20 @@ image::images/centralized.png["Диаграмма централизованно

Несмотря на это, данный подход тоже имеет серьёзные минусы.
Самый очевидный минус -- это единая точка отказа, представленная централизованным сервером.
Если этот сервер выйдет из строя на час, то в течение этого времени никто не сможет использовать контроль версий для сохранения изменений, над которыми работает, а также никто не сможет обмениваться этими изменениями с другими разработчиками.
Если жёсткий диск, на котором хранится центральная БД, повреждён, а своевременные бэкапы отсутствуют, вы потеряете всё -- всю историю проекта, не считая единичных снимков репозитория, которые сохранились на локальных машинах разработчиков.
Если этот сервер выйдет из строя на час, то в течение этого времени никто не сможет ни сохранить сделанные изменения, ни обменяться ими с другими разработчиками.
Если жёсткий диск, на котором хранится центральная база данных, повреждён, а своевременные бэкапы отсутствуют, вы потеряете всё -- всю историю проекта, не считая единичных снимков репозитория, которые сохранились на локальных машинах разработчиков.
Локальные VCS страдают от той же самой проблемы: когда вся история проекта хранится в одном месте, вы рискуете потерять всё.

==== Распределённые системы контроля версий

(((контроль версий,распределённый)))
Здесь в игру вступают распределённые системы контроля версий (Distributed Version Control System, далее DVCS).
В DVCS (таких как Git, Mercurial, Bazaar или Darcs) клиенты не просто скачивают снимок всех файлов (состояние файлов на определённый момент времени) -- они полностью копируют репозиторий.
В этом случае, если один из серверов, через который разработчики обменивались данными, умрёт, любой клиентский репозиторий может быть скопирован на другой сервер для продолжения работы.
Каждая копия репозитория является полным бэкапом всех данных.
В этом случае если один из серверов, через который разработчики обменивались данными, умрёт, любой клиентский репозиторий может быть скопирован на другой сервер для продолжения работы.
Каждая копия репозитория является полной копией всех данных.

.Распределённый контроль версий
image::images/distributed.png["Диаграмма распределённого контроля версий"]

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