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

477
Adam Badura

В нашей компании мы используем 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, даже если только посмотреть, сработает ли это.

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

1
Я уже пробовал (только сейчас) Mercurial, но кажется, что нет прямой поддержки SVN, и их вики предупреждают, что существующая поддержка через плагины не готова к работе. Тем не менее я решил попробовать, но мне не удалось установить плагин. Я "Windows-своего рода парень". Мне нравится иметь exe / msi файл для двойного щелчка и все готово. В то время как `hgsubversion` (этот я пробовал) в инструкции по установке начался с загрузки и сборки исходных кодов. Я загрузил то, что казалось «двоичным», но не смог найти, куда его поместить и включить расширение. Я сдался (пока). Adam Badura 12 лет назад 0
Затем я перешел в Git, чтобы напомнить, что для этого требуется Cygwin или msysGit. Но все же я попробую это сейчас. (Не говоря уже о том, что на странице загрузки http://code.google.com/p/msysgit/downloads/list неясно, что загружать, если мне нужна последняя стабильная версия, так как немногие последние версии помечены как бета-версия .. .) Adam Badura 12 лет назад 0
Я * использую * hg + hgubversion без большой головной боли. Lazy Badger 12 лет назад 0
Просто некоторые URL для чтения (не на английском языке) [Почему не базар] (http://zakalwe.fi/~shd/articles/why_not_bazaar.html) [Не священная война - только некоторые существенные факты] (http: // selenic.com/pipermail/mercurial/2010-April/031191.html) Lazy Badger 12 лет назад 0

2 ответа на вопрос

1
mgorven

Я считаю, что 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 и продолжайте коммитить. Все это будет происходить локально и не повлияет на ствол Subversion. Вы можете создать столько веток, сколько захотите.

Если вы хотите зафиксировать эти изменения в стволе Subversion, объедините ветку с вашим локальным стволом. Сначала убедитесь, что ваш локальный транк обновлен с помощью bzr pull.

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

Все изменения, сделанные вами в ветви, будут зафиксированы как одна ревизия в Subversion (даже если вы сделали несколько изменений в ветви).

0
janos

There is a way to continue interrupted checkouts. If you create a shared repository, and then start the checkout inside of that, then if the checkout is interrupted, you can delete the directory with incomplete data and repeat the checkout command. Like this:

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 

Repeat the checkout as long as it takes.

Btw, the checkout is extremely slow at first, because it downloads the full history. This is also the reason why you cannot just import a local subversion checkout, because subversion only downloads a single revision, doesn't have the full history.

After checkout is complete, you can use the branch exactly the same way as you use subversion. Before you start working on new code, you do bzr update to get the latest and greatest from your company's project, when you want to commit you commit as usual, and it will be committed to Subversion just fine.

You can use the distributed capabilities of Bazaar to the full. Everything you describe in your question is possible with Bazaar, but doing them requires a good understanding of distributed version control. The fact that the backend repository server is Subversion, makes little to no difference in practice, the bzr-svn plugin makes it all transparent.