Как git-svn ведет себя с svn-репозиториями, которые изменили макет? - PullRequest
6 голосов
/ 20 июля 2009

Этот вопрос похож на этот и этот , но сценарий немного сложнее.

Я начал несколько лет назад с частного svn-репозитория (который я использую в основном для общих конфигурационных файлов и т.п. между различными машинами). Я не был слишком осторожен с макетом хранилища (где ветки, переходы и т. Д.), Поэтому со временем он сильно изменился. Это было, конечно, ошибкой, но сейчас уже слишком поздно. Совсем недавно я переместил его в более стандартную схему svn trunk / branch / tags, в основном с помощью команд svn move, но, конечно, старая история все еще присутствует в репозитории (и, честно говоря, немного беспорядок) .

Теперь я бы хотел преобразовать это навсегда в репозиторий git. Я пытался использовать git-svn, но кажется, что он обрабатывает только ситуации, когда соблюдается согласованное соглашение о соединительных линиях / ветвях / тегах (да, вы можете указать альтернативные имена, но, по-видимому, только одно для каждого). Довольно большая часть истории моего репозитория имеет ствол эффективно в корне репозитория, например, с тегами / и ветвями / в качестве подкаталогов.

Какой лучший способ справиться со всем этим? В идеале мне бы хотелось, чтобы в репозитории git, с которым я в конечном итоге работал, была как минимум вся доступная история, даже если ветви и теги не представлены должным образом как первоклассные концепции в git.

Точнее говоря, как svn-git будет обрабатывать файлы вне подкаталогов транка / ветвей / тегов, которые он предоставляет? Мои наблюдения пока таковы, что иногда они пропускают их (определенно, не в порядке), а иногда добавляют их в новый репозиторий.

Любые мысли приветствуются.

1 Ответ

2 голосов
/ 24 мая 2011

По моему опыту, единственный способ справиться с этим - отслеживать местоположение хранилища во времени и делать отдельный git-svn-clone для каждого периода, в течение которого проект оставался в одном месте.

После того, как вы создали хранилища для разных стадий во времени (или, по крайней мере, настолько далеко, насколько это возможно), вы можете привить хранилища вместе.

Я создал скринкаст, демонстрирующий эту технику здесь:

http://blog.tfnico.com/2010/10/gitsvn-6-grafting-together-svn-history.html

...