LG.BALUKATION's Weblog

Ничего, это тоже кое-что… А при желании из него можно сделать что угодно

Системы управления ревизиями

Posted by LG.BALUKATION на 2009/06/10

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

Так уж повелось, что активно пользоваться ими стали прежде всего программисты, но со временем и некоторые «простые смертные» заметили преимущества такого подхода к обработке информации и стали тоже потихоньку использовать прогерские наработки (самый известный пример наверное wiki-технлогии — всякие ресурсы типа wikipedia, lurkmore, google docs, etc…).

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

Concurrent Versions System
Забавно, но на момент начала моего интереса к сабжу, основной его реализацией считалась СVS, однако интересом на ту пору всё и ограничилось, так что реально юзать её я стал только этой весной. На сей момент CVS считалась уже древней разработкой (ведь ей не за горами и 30 лет как стукнет!), с которой все желающие мигрируют на «более прогрессивные решения». Однако, Electronic Arts вот ещё не мигрировала, и начав работать с ними, я вынужден был опробовать и «старушку» CVS. Система очень простая и обладает весьма ограниченным функционалом, который впрочем не редко расширяется сторонними средствами. По-сути, система учитывает ревизии отдельных файлов, но изменения каталогов для неё прозрачны — например переименование файла для неё выглядит как его удаление и последующее добавление нового файла (т. е. это две разных операции и новый файл по мнению системы ничего общего не имеет со старым). Несколько не удобно и внутреннее представление объектов — это оригинальные файлы и набор патчей к ним, т. е. скажем извлекая определённую ревизию некоего файла, мы берём его оригинал и последовательно патчим его много-много раз, подвергая всем промежуточным преобразованиям пока не получим нужный вариант.

SubVersioN
Постепенно возрастающее желание расширить возможности CVS было очень ограничено стремлением последней к простоте. Посему для реализации инноваций была создана новая система учёта ревизий, похожая внешне, но совсем другая внутри. SVN работает заметно сложнее, но и может несколько больше. Из основных изменений стоит отметить уход от учёта ревизий каждого отдельного файла к общим ревизиям хранилища. Ну вот скажем был у нас каталог с ревизией N, мы там поменяли один/несколько файлов и получился каталог ревизии N+1, причём даже не изменённые файлы обрели теперь такой номер. При переименовании, можно запросто смотреть что было с файлом как после сего магического действа, так и до него. В общем система стала несколько быстрее и удобнее в использовании, но и работа её потеряла былую прозрачность. Часть прироста в скорости обеспечило и хранение копии файлов у пользователя — т. е. например для просмотра текущих отличий можно не выкачивать «эталоны» с сервера и т. п., но придёться попутно смириться с почти двойной тратой места на жёстком диске — CVS хранило у пользователя совсем немного информации.

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

Git (ололо, в кои-то веки не аббревиатура или сокращение!11)

Рассмотренные выше пара систем как бы намекают нам на необходимость соответствующего сервера, к которому будет постоянный доступ у всех участников проекта. Но на самом-то деле отдельный сервак не так уж и нужен, есть достаточно ситуаций, когда он является лишней морокой для пользователя и администратора (его нужно установить и настроить, с ним всегда должна быть связь, да и вообще иногда пользователь всего один — нафига ему все эти навороты, неуж-то нельзя никак попроще учитывать изменения?). В общем, есть ещё и распределённые системы без чёткого сервера. Такой подход требует дополнительно пространства на стороне пользователя, но и даёт ему независимость — «рабочая копия» получается самодостаточной.

Узнал я о нём несколько лет назад, но попробовать удосужился только сегодня. Внешне всё примерно как обычно, но внутри всё тоже сделано достаточно просто (чего не скажешь о SVN). Учёт объектов опирается не на имена, а на их содержимое — т. е. уже много раз упоминавшееся переименование видится системе именно как «изменение имени объекта с таким-то содержимым» без необходимости всяких лишних указаний со стороны пользователя. Вообще это некий unix-way подход к учёту ревизий — функционал опирается на простые и по большей части стандарные утилиты/фильтры да скрипты оболочки (обе прошлые реализации подразумевали наличие своих изощрённых демонов на сервере и особых программ в качестве клиента).

Кстати, изначально git был сделан Линусом Торвальдсом для управления ревизиями линухи, так что многие «красноглазики» относятся к нему излишне фанатично. Однако это по большей части действительно хорошая разработка, а некоторые недостатки вполне можно списать на её молодость — мне оно показалось вполне удобным инструментом для частного применения, юзать это повсеместно пока несколько проблематично.

———
За бортом этого краткого обзора остались всякии Арчи, Меркурии, мелкомягкая приблуда для хранения сорсов и многое другое… Тему сисек я тоже не раскрыл — я просто высказал свои ощущения от используемых инструментов.

Advertisements

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s