Глава 18. Управление версиями

18.1. Введение

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

Системы управления версиями полезны при работе с разными видами данных: исходными текстами программ, двоичными файлами, конфигурационными файлами, сценариями, статьями и книгами, индексами, складскими базами данных — словом, с любыми текстовыми документами. Поскольку система управления версиями отслеживает все вносимые изменения, вы можете легко вернуться к любой точке жизненного цикла определённого проекта. Система управления версиями выполнит всю работу — она не зависит от добросовестности пользователей, создающих и сохраняющих копии разных версий документа.

Системы управления версиями помогают организовать совместную работу групп над общим проектом. Например, проект можно разбить на несколько ветвей, которые позднее будут объединены. Также возможно объединение нескольких версий файла, хотя следует помнить, что программа не понимает смысл содержимого файла и не способна разумно разрешать конфликты — она знает лишь то, что файлы различаются, поэтому объединение иногда требует человеческого участия.

Существует немало бесплатных программ управления версиями. Приведу список самых распространённых:

Некоторые коммерческие продукты:

Программы RCS и CVS существуют уже давно и получили самое широкое распространение. Они просты в настройке и использовании, а их давнее использование обеспечило тестирование в жёстких условиях.

Subversion, GNU Arch и Monotone обладают возможностями, отсутствующими в CVS: созданием распределённых репозитариев (в отличие от модели CVS с центральным сервером) и атомарными операциями закрепления изменений. При атомарном закреплении все изменения происходят одновременно. Изменения, вносимые пользователем в репозитарий, применяются как единое целое и становятся видимыми для других пользователей только после завершения. CVS вносит изменения на уровне отдельных файлов, поэтому если закрепление будет прервано из-за сбоя сети, оно будет внесено только частично.

Несмотря на всю полезность атомарного режима, Subversion, GNU Arch и Monotone всё же нельзя назвать зрелыми продуктами. GNU Arch и Subversion трудны в установке и настройке и не так легко осваиваются. В Monotone используется другая, весьма интересная архитектура — принципиальное отличие заключается в том, что файлы передаются по внедрённому сетевому протоколу netsync вместо HTTP, NNTP или SMTP. Тем самым ликвидируются многие сложные этапы настройки, а каждая установка Monotone может выполнять функции как клиента, так и сервера.

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

BitKeeper — один из самых популярных коммерческих продуктов. В частности, он используется при разработке ядра Linux. Разработчики BitKeeper предлагают как 30-дневную пробную версию, так и усечённую бесплатную версию для личного использования.

Несмотря на большое количество альтернатив, в этой главе основное внимание уделяется RCS и CVS, самым зрелым и широко используемым системам управления версиями. RCS является прикладной частью (backend) CVS, что упрощает освоение обеих программ. RCS идеально подходит для одного пользователя с простыми потребностями; CVS хорошо подойдёт как для одного пользователя, так и для группы пользователей, работающих над сложными проектами.