Зеркальное копирование Subversion-репозитория с Bazaar без импорта всей истории? - PullRequest
3 голосов
/ 14 сентября 2011

Я хотел бы использовать Bazaar для работы с проектом, который использует Subversion и имеет очень долгую историю. Например svn://svn.freebsd.org/base/head.

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

Моя проблема в том, что все, что я нашел, похоже, написано с предположением, что я хочу импортировать полную историю из SVN. Я не хочу этого делать. Это занимает слишком много места на диске (и в действительности импорт будет исчерпан, если я попытаюсь). Мне действительно наплевать на какие-либо изменения до определенного SVN revno / tag. Но я хочу, чтобы каждый отдельный коммит после точки отсечения правильно отображался на стороне базара. Как я могу это сделать?

Мне в основном нужна следующая логика для моей ветки поставщика (из которой я могу создавать свои локальные ветки):

svn co svn://svn.freebsd.org/base/head -r CUTOFF_REVNO

while true
do
    svn up -r NEXT   # note: NEXT is not possible even though there is PREV
    bzr commit
    sleep N
done

Очевидно, что вышеизложенное не хранит сообщения о коммитах и ​​другие подобные вещи на базаре, что является проблемой. Я мог бы сделать это ежедневной работой cron, которая просто выполняет svn up и фиксирует все SVN-изменения в течение дня в ветви Bazaar за один ежедневный коммит.

Как я могу добиться этого, чтобы метаданные и отдельные коммиты были должным образом преобразованы в базар (с той же степенью детализации, что и на стороне SVN)? Мне не нужно быть в состоянии протолкнуть в SVN. Все, что мне нужно, это одностороннее решение. Я надеюсь, что где-нибудь найдется инструмент, способный сделать именно это!

1 Ответ

2 голосов
/ 14 сентября 2011

Я думаю, что нашел потенциальное решение, поэтому я отвечаю сам.

Существует инструмент под названием Tailor , который может сделать именно это. Это универсальное решение, поэтому оно работает с большинством популярных систем контроля версий (таких как CVS, SVN, Bazaar, Mercurial, Git, Darcs и некоторые другие).

Чтобы выполнить то, что я просил, мне нужен следующий файл конфигурации, например freebsd-tailor.conf:

[DEFAULT]
verbose = True
projects = freebsd-current

[freebsd-current]
root-directory = /home/tailor/freebsd-current
subdir = upstream
source = svn:freebsd-current
target = bzr:freebsd-current
start-revision = 225424

[svn:freebsd-current]
repository = svn://svn.freebsd.org/base
module = /head
encoding = iso-8859-1

[bzr:freebsd-current]

Затем я просто запускаю tailor -c freebsd-tailor.conf, чтобы выполнить начальную синхронизацию на revno 225424, и перезапускаю команду каждый раз, когда я хочу постепенно получать новые изменения после этого.

Я сейчас проверяю это. Я буду обновлять свой ответ с любым успехом или неудачей. Другие решения по-прежнему приветствуются. :)

UPDATE:

Я сделал пример конфигурации немного проще и добавил запись encoding, которая, похоже, требуется для многих проектов.

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

...