1

В нашей компании мы используем 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 ответа2

1

Я считаю, что 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

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

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 делает все это прозрачным.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .