Posterous theme by Cory Watilo

Filed under: bzr

git, gitosis, tailor, and bzr

git

До общения с Oleganza я не видел у git каких-либо ярких преимуществ перед bzr. И, наверное, не увидел бы, если бы не Олег. Первое что было самым необычным - git полностью децентрализованый. И привычный svn-like workflow тут не работает. Надо было привыкать к branch-style. Второе - это то, что команды с теми же названиями что и у svn имеют другой смысл. Жутко понравилось что ветки git держит в себе, то есть не надо плодить по 3-4 папки для разных фичей.

gitosis

Также я задумался о совместной работе. github - это, конечно, хорошо, но у меня уже есть багтракер понимающий git. Отчего бы не попробовать git на своем сервере? Был заведен юзерь git без пароля [cc lang="bash"] sudo adduser --shell /bin/sh --gecos 'git version control' --disabled-password --home /home/git git [/cc] поставлен gitosis [cc lang="bash"] sudo apt-get install gitosis [/cc] сделаны небольшие правки его сорсов (дело в том, что по умолчанию gitosis создает репо с маской 0750, мне же надо было с 0755 - чтоб www-data мог его читать): правим [cc lang="bash"] /var/lib/python-support/python2.5/gitosis-0.2-py2.5.egg/gitosis/repository.py [/cc] и заменяем 0750 на 0755. Подробнее описано в блоге разработчика gitosis.

tailor and bzr

Когда все взлетело с git, решил попробовать отконвертировать при помощи утилиты tailor старые репо из bzr в git. Конфиг получился примерно такой (замечания приветствуются): [cc lang="ini"] [DEFAULT] verbose = True [project] target = git:target start-revision = INITIAL root-directory = /home/dm/tmp/bzr2git state-file = tailor.state source = bzr:source subdir = bzr2git.tmp [bzr:source] repository = /home/dm/bzr/BZR_PROJECT_HERE [git:target] repository = /home/dm/tmp/bzr2git/tmp/.git [/cc] и после запуска [cc lang="bash"] tailor bzr2git.conf [/cc] в /home/dm/tmp/bzr2git/bzr2git.tmp появляется вполне живой git-репозитарий. Его я уже стягивал к себе и вливал в gitosis от себя.

Примечание

git не отслеживает пустые папки, и в процессе конвертации теряются "log", "tmp", etc... Чтоб отслеживал достаточно [cc lang="bash"] mkdir log touch log/.empty [/cc]

Bzr rocks

С первого знакомства мне очень понравился bazaar-ng. И вот почему. Он нацелен на usability. И это видно сразу. Вот наверняка многие пользовались TortoiseSVN. Там все делается просто, легко и удобно, правда? А вот теперь пойдем в консоль удаленного сервера. И добавим маски для игнорирования файлов (логи, темпы, кеши всякие). А теперь еще добавим в репозитарий те два десятка сорсов в разных папках, которые написали/докопировали в проект. Все svn это не проблематично, но несколько неудобно. В bzr же все это делается легким движением руки - правим .bzrignore в корне проекта добавляя маски, потом жмем bzr add && bzr commit. Bzr ориентирован на ветки. И у меня получается ветка == проект. Я выгружаю себе его целиком. В результате в каждой папке нету папок .svn, есть лишь одна папка .bzr в корне проекта. Мне очень редко требовалось делать чекаут определенной папки из проекта. Проект часто требуется обновить до того, что живет в репозитории. Bzr имеет т.н. легковесные чекауты, которые не содержат подробной истории изменений. Как-раз то, что чаще всего нужно на рабочем сервере. Также весьма порадовала только-что сложившаяся ситуация: я делал commit, и внезапно пропал линк. bzr стоял и терпеливо ждал, пока я ребутнул модем. Как только пинги появились, он все быстро завершил. Ни обрывов, ни страшных ругательств небыло. Что касается скорости работы - она вполне приемлема. Да, есть системы и быстрее, но bzr меня вполне устраивает. Кроме того, мне абсолютно неважно, будет коммит выполняться 5 или 10 секунд, или даже 20 - я же не собираюсь безостановочно коммитить. Навеяно впечатлениями о Git.