пятница, 23 октября 2009 г.

bzr-svn

тема bzr-svn волнует меня тоже не мало.

А именно, есть очень старый но активный проект, подконтрольный svn. За последнее время привыкнув к bzr хочется мигрировать, но делаю уже которую попытку, и каждый раз откатываюсь.
Мигрировать в смысле полностью, не использовать bzr как svn-клиента. а перевести svn repo в bzr repo. Но обязательно хочется сохранить всю историю.
Репозиторий svn в этом проекте представляет из себя классику
===
branches
- petrov
- redesign
- task_12
-task24
....
tags
-0.1
-0.2
-0.3
...
1.12
trunk
==
Бранчи для отдельных фич, таги для релизов.
Из бранчей периодически работа мержится в trunk
В tags как не прискорбно, делается тоже довольно много комитов (если этот релиз где то в работе находится, и к нему всякие багфиксы и улучшения выходят, которым некогда дожидаться когда trunk в следующий релиз перейдет) при этом из tags очень редко merge делается в trunk, там чаще всего это проблему обходят иначе, ну т.е. багфикс делается зачастую с неким рефакторингом, а в внутри tags лишь бы "прямо сейчас" пофиксить.
Грубо говоря получается сразу несколько heads где активная работа идет, например пару тройку последних тагов, парочку бранчей и trunk (угу есть такие кто в транк обожает комитить , брезгуя созданием себе бранча для работы).
Ну и плюс обычные проблемы, когда заливка из branch или backport из tags ломает trunk и его потом там же в trunk фиксят. В итоге дерево ревизий , такое замысловатое выходит.
Из tags кстати часто настроены post_commit hooks которые делают разворачивание (deployment) на рабочие сервера где эти релизы крутятся, поэтому в tags не допускаются "полу рабочие" версии, и их из за этого часто правят и тестят в branches дереве.
Ну например, обнаружили баг в tags/1.6 который на паре серверов крутится, делают svn cp ..tags/1.6 branches/bug/124 там отлаживают и потом merge в tags/1.6 commit, и все ушло на сервера.

Все это начиналось с svn 1.4 кажется, или раньше, ну во всяком случае информации о merge там еще нет. Пишут конечно в коментах к фиксам что то вроде merge -r1231..1234 from tags/1.7 но, это для людей только подходит.

Ну надеюсь можно понять что я пытался объяснить.

И вот хочется волшебным образом получить что то вроде такого, так сказать в серверном репо.
==
Project1 <-- init-repo --no-trees
branches
petrov
tags
1.7
trunk
==
Что бы разработчики могли работать типа такого
bzr co --lighweiht (по желанию) sftp://...../Project/branches/petrov/task1
поработать там и закомитить, потом как то
bzr sw sftp://..../trunk ; bzr merge sftp://...../Project/branches/petrov/task1

Ну вобщем копируя уже сложившийся workflow...

И как я не мучался, пробовал bzr2svn , svn-import , уж пробовал руками какие то ревизии вытаскивать, не получается 1 в 1 переделать репозиторий под svn.
Ну что бы я например сделал себе
bzr co sftp://..../tags/1.7
и по bzr viz увидел, что был отрелизен он с trunk@r1241 после этого мержили в него изменения с branches/task12 и branches/task1241 , а также какое то количество редакций прямо в tags/1.7

или что бы можно было увидеть в bzr viz sftp:// ... /trunk какие последние ветки из branches были слиты в него.

Каждый раз как то не так, уж намучался с guessed-layout и прочими параметрами. Похоже мой workflow под стандартные guessed не подходит.


Ну вобщем в затруднении. Как же мне его репозитарий переделать в bzr ума не приложу.