Сценарии взаимодействия Bazaar и SVN

В нашей компании мы используем SVN-репозиторий. Я занимаюсь программированием как с работы (основное место), так и дома (в основном эксперименты и рефакторинг). Это две разные машины, в разных сетях и практически никогда не включаемые одновременно (ведь я либо на работе, либо дома...)

Я хотел дать шанс некоторой распределенной системе управления версиями и решить некоторые проблемы, связанные с процессом на основе SVN и имеющим две машины. Из мерзавцев, Mercurial и Bazaar я решил начать с Bazaar, поскольку он утверждает, что он предназначен для использования людьми. Это был мой первый раз с распределенной системой и с приятным и простым пользовательским интерфейсом.


Особенности, которые я хотел достичь, были:

  1. Возможность обновления из репозитория SVN и фиксации его.
  2. Возможность локально совершать шаги моей работы над заданием.
  3. Возможность иметь несколько отдельных задач одновременно в своих местных филиалах.
  4. Возможность делить эти ветви между моей работой и домашним компьютером.

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

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

Тем не менее, ручка-ручка должна использоваться только для транспортировки. Я не хочу редактировать или строить там.


Я пытался следовать рекомендациям Bazaar для интеграции с SVN. Но я потерпел неудачу. Я пробовал оба

bzr svn-import

а также

bzr checkout

предоставляя URL из моего хранилища как https://... а также svn+https://..., В некоторых случаях у него были некоторые проблемы с сертификатами, но в выводе указывался аргумент, чтобы игнорировать их, поэтому я сделал это. Иногда он просил меня войти (в других случаях, может быть, он вспомнил... я не знаю), что я и сделал.

Все они работали очень медленно (это могло быть нашей проблемой с сервером) и в какой-то момент были прерваны из-за разрыва соединения (это почти наверняка является проблемой нашего сервера: через некоторое время оно обрезает соединение). Но поскольку (в отличие от SVN) перезапуск начинается заново, а не с того места, где он был прерван, я не смог достичь всех ~19000 ревизий (заканчивающихся обычно где-то около 150).


Что и как мне делать с базаром? Можно ли как-то импортировать SVN-репозиторий из локальной проверки (чтобы я не терпел усечение соединения)? Мне сказали, что коллега, который работал с нами, сделал нечто подобное (импортировал SVN-репозиторий с полной историей) с Mercurial, как в мгновение ока. Поэтому я серьезно думаю о том, чтобы попробовать Mercurial, хотя бы для того, чтобы посмотреть, сработает ли это.

Но также каковы ваши общие рекомендации для достижения перечисленных функций?

2 ответа

Я считаю, что Bazaar - самая разумная DVCS из всех, и особенно хороша для пользователей, знакомых с Subversion. Он может быть очень эффективно использован с системой Subversion.

Это выглядит как bzr svn-import Команда импортирует все ветки из Subversion, что, вероятно, не то, что вам нужно. Невозможно импортировать из извлечения Subversion, потому что Subversion не хранит всю историю локально.

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

bzr init-repo ~/project

Затем используйте bzr checkout Команда для создания извлечения из вашего ствола Subversion. Укажите URL Subversion для ствола проекта.

cd ~/project
bzr checkout https://svn.example.com/project/trunk trunk

Затем у вас будет дерево Bazaar в ~/project/trunk, которое привязано к стволу Subversion. Связанная ветвь означает, что коммиты автоматически передаются в удаленную ветвь, т.е. все, что вы здесь делаете, будет зафиксировано в транке Subversion.

Если вы хотите внести некоторые изменения, создайте новую ветку из вашей локальной магистрали.

cd ~/project
bzr branch trunk fix-some-bugs

Работайте в ~/project/fix-some-bugs и продолжайте коммитить. All of this will happen locally and won't affect the Subversion trunk. You can create as many branches as you want.

When you want to commit these changes to the Subversion trunk, merge the branch into your local trunk. First make sure that your local trunk is up to date by using bzr pull,

cd ~/project/trunk
bzr pull
bzr merge ../fix-some-bugs
bzr commit

This will commit all the changes you made in the branch as a single revision in Subversion (even if you made multiple commits in the branch).

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

bzr init-repo ~/project
cd ~/project
bzr checkout https://svn.example.com/project/trunk
# ... gets interrupted ...
rm -fr trunk
bzr checkout https://svn.example.com/project/trunk

Повторите проверку столько времени, сколько потребуется.

Кстати, оформление заказа сначала идет очень медленно, потому что оно загружает полную историю. Это также причина, почему вы не можете просто импортировать локальную проверку Subversion, потому что Subversion загружает только одну ревизию, не имеет полной истории.

После завершения оформления вы можете использовать ветку точно так же, как и Subversion. Прежде чем начать работу над новым кодом, вы делаете bzr update чтобы получить последние и самые лучшие результаты проекта вашей компании, когда вы захотите совершить коммит, как обычно, и он будет отлично работать с Subversion.

Вы можете использовать распределенные возможности Bazaar в полной мере. Все, что вы описываете в своем вопросе, возможно с помощью Bazaar, но для их выполнения требуется хорошее понимание распределенного контроля версий. Тот факт, что внутренним сервером репозитория является Subversion, практически ничего не меняет, а плагин bzr-svn делает все это прозрачным.

Другие вопросы по тегам