Как импортировать ветку svn в git с историей транка

Это свн trunk дорожка:

http://svn/path/libs/trunk/mylib

А вот и branch дорожка:

http://svn/path/libs/branches/mylib/mylib-feature-branch

Мне нужно перенести только ветку в git, но мне также нужна история стволов перед созданием ветки.

Следующая команда выбирает только историю веток:

git svn clone http://svn/path/libs/branches/mylib/mylib-feature-branch

Я прочитал этот ответ, но не мог понять, как я должен изменить git svn clone Команда, чтобы иметь полную историю филиала. Любой совет будет принят во внимание.

1 ответ

Решение

git-svn не подходит для одноразовых преобразований репозиториев или частей репозитория. Это отличный инструмент, если вы хотите использовать Git в качестве внешнего интерфейса для существующего сервера SVN, но для одноразовых преобразований не следует использовать git-svn, но svn2git который гораздо больше подходит для этого варианта использования.

Есть инструменты под названием svn2git Вероятно, лучшим из них является KDE из https://github.com/svn-all-fast-export/svn2git. Я настоятельно рекомендую использовать это svn2git инструмент. Это лучшее, что я знаю из доступных, и оно очень гибкое в том, что вы можете делать с его файлами правил.

Вы легко сможете настроить файл правил так, чтобы перенеслась именно ваша ветка и ее история.

Если вы не на 100% об истории вашего хранилища, svneverever http://blog.hartwork.org/?p=763 - отличный инструмент для изучения истории SVN-репозитория при его миграции на Git.


Несмотря на то, что git-svn проще начать, вот еще несколько причин, по которым использование KDE svn2git вместо git-svn превосходит, помимо своей гибкости:

  • история перестраивается намного лучше и чище svn2git (если используется правильный), это особенно актуально для более сложных историй с ветвями и слияниями и т. д.
  • теги являются реальными тегами, а не ветвями в Git
  • с git-svn теги содержат дополнительный пустой коммит, который также делает их не частью ветвей, поэтому нормальный fetch не получите их, пока вы не дадите --tags к команде, так как по умолчанию выбираются только теги, указывающие на извлеченные ветви. С правильными тегами svn2git, где они принадлежат
  • если вы изменили макет в SVN, вы можете легко настроить это с svn2git, с git-svn вы потеряете историю в конце концов
  • с svn2git Вы также можете легко разделить один SVN-репозиторий на несколько Git-репозиториев.
  • или легко объединить несколько репозиториев SVN в одном корне SVN в один репозиторий Git
  • преобразование в миллиард раз быстрее с правильным svn2git чем с git-svn

Есть много причин, почему git-svn хуже и кде svn2git выше.:-)

Другие вопросы по тегам