Thursday, March 13, 2008

Прелести GIT и бэкап SVN репозитория

Натолкнувшись на неведомый доселе GIT сначала здесь, а потом здесь, я, несмотря на большую приверженность SVN, решил опробовать его при случае. Мне хотелось попробовать, как он справится с задачами, приближенными к боевым.
Также не так давно я столкнулся с небольшой проблемой, которую хотелось бы решить. Дело в том, что для одного достаточно объемного проекта(более 9 месяцев труда 5-ти программистов, 2100 ревизий в SVN репозитории) захотелось сделать бэкап. Я вообще трудно представляю себе жизнь без системы контроля версий, которая предоставляет возможность отката, бранчевания и т.д. Именно поэтому простой бэкап HEAD ревизии меня абсолютно не устраивал. Проблема усложнялась тем, что администраторского доступа к репозиторию не было - нужно было думать, как ограничиться стандартным клиентским.
Насколько я знаком с возможностями SVN, клонирование репозитория клиентом в список этих возможностей не входит. Конечно, можно написать простенький скрипт, который будет поревизионно апдейтить код, а после этого коммитить его куда-нибудь в локальный репозиторий, однако не факт, что такое решение будет быстрым и качественным. В сочетании с нехваткой времени и необязательностью подобного бэкапа это привело к тому, что скрипт я так и не написал.
Однако, когда дело дошло до тестирования возможностей GIT, я решил убить сразу двух зайцев - сделать бэкап, а также проверить насколько быстр, удобен и неприхотлив к ОЗУ/ПЗУ вышеназванный GIT, благо он умеет клонировать SVN репозитории. Так что я начал с того, что поставил себе GIT. Все указания по установке можно найти здесь. Для теста поставил на Windows XP SP2( повременю пока с установкой на Ubuntu - всё равно я уверен, что проявит GIT и там себя не менее достойно ). Установочные файлы брал отсюда. Итак, после установки я запустил команду

git-svn clone http://host/path
дабы сбэкапить нужную мне ветку(975 коммитов) и стал ждать, пока он закончит работу. Сразу скажу, что длилось это довольно долго - после 4-х часов работы он сделал только чуть больше половины. Сколько времени это заняло в целом я даже и не знаю - я не выдержал и оставил уомпьютер трудиться на ночь.
На утро можно оценить результаты. Данные из выбранной ветки занимают около 25-ти Мб. GIT в отличие от SVN не плодит множество папочек во всех каталогах, а создает локальный репозиторий, в котором и хранит все данные. Т.о., сами данные хранятся в чистом виде, тогда как в SVN дополнительные папки увеличивают объем до 51-го Мб. Теперь обратим внимание на то, сколько занимает локальный репозиторий GIT, ведь цифра действительно поражает - всего 17 Мб - а ведь здесь хранятся все изменения, которые велись в ветке с начала проекта! Т.о., данные вместе с репозиторием GIT занимают только 42 метра. Конечно, в наше время объемы винчестеров позволяют не обращать внимание на такие мелочи (к тому же, после компиляции 25 Мб всё равно превращаются в 2 Гб:) ), однако всё же приятно...
Идём далее. Оценим грубо скорость чекаута. Для SVN эта величина - 35 секунд(стоит всё же учесть, что checkout при тестировании вёлся по локальной сети). С помощью же GIT чекаут из локального репозитория был сделан за 4 секунды! Это при том, что простое копирование этих же данных идёт около 7 секунд. Впечатляет!

Вывод: GIT - это нечто новое и весьма интересное, на что стоит обратить внимание при выборе системы контроля версий для проектов. Конечно, он не так удобен и привычен(субъективное мнение) как SVN, однако это всё дело времени - ведь GIT это не просто version control system, это инфраструктура для создания идеальной такой системы.
Редакция от 27.08.08. Тем, кому нужен простой бэкап svn репозитория - могу посоветовать svnsync

2 comments:

  1. А svnsync из стандартной поставки svn не пробовали? Насколько я понимаю, он полностью покрывает описанные требования.
    А про GIT я слышал, что под виндой он очень и очень не быстр.

    ReplyDelete
  2. К сожалению, я о таком даже и не знал. Использование SVN через GUI, вероятно, не дало мне заметить ее. А по поводу GIT под виндой - я под виндой и пробовал. Он реально БЫСТР. :)

    ReplyDelete