Сплит svn2git в нескольких ревизиях
Я использую svn2git, чтобы перенести репозиторий SVN в репозиторий git. Репозиторий SVN довольно большой. Первое, что я попробовал, было:
$ mkdir repo
$ cd repo
$ svn2git https://svn/repo/ --revision 1:40000 --username xxx
Это началось хорошо, но через несколько часов я получил:
ошибка: waitpid для git-svn завершился ошибкой: нет дочерних процессов Не удалось прочитать тело ответа: ошибка SSL: получен пакет TLS с неожиданной длиной.
Теперь я хочу разделить мою команду svn2git на несколько шагов. Как это:
$ mkdir repo
$ cd repo
$ svn2git https://svn/repo/ --revision 1:1000 --username xxx
$ svn2git https://svn/repo/ --revision 1000:2000 --username xxx
$ svn2git https://svn/repo/ --revision 2000:3000 --username xxx
...
Я знаю, что это уродливо, но я не вижу другого выбора в данный момент. Это даст мне в конце концов такое же решение, как 1:40000
или это перезапишет это? Я пытался проверить с du -sh repo/
но размер всегда разный (не всегда растет), поэтому я не знаю.
1 ответ
Для одноразовой миграции git-svn
не подходит для преобразования хранилищ или частей хранилища. Это отличный инструмент, если вы хотите использовать Git в качестве внешнего интерфейса для существующего сервера SVN, но для одноразовых преобразований не следует использовать git-svn
, но svn2git
который гораздо больше подходит для этого варианта использования.
Есть много инструментов, называемых svn2git
Вероятно, лучшим из них является KDE из https://github.com/svn-all-fast-export/svn2git. Я настоятельно рекомендую использовать это svn2git
инструмент. Это лучшее, что я знаю из доступных, и оно очень гибкое в том, что вы можете делать с его файлами правил.
svn2git
инструмент, который вы используете, основан на git-svn
и, следовательно, страдает от большинства тех же недостатков, что и прямые git-svn
делает.
Вы легко сможете настроить svn2git
s файл правил для получения желаемого результата из вашей текущей компоновки SVN, и вы также можете указать, чтобы он оставлял пустые каталоги, предоставив ему параметр командной строки, который заставляет его ставить пустой .gitignore
файлы в каталогах, чтобы сохранить их.
Если вы не на 100% об истории вашего хранилища, svneverever
http://blog.hartwork.org/?p=763 - отличный инструмент для изучения истории SVN-репозитория при его миграции на Git.
Даже если git-svn
(или svn2git
вы использовали) легче начать, вот еще несколько причин, почему с помощью 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
выше.:-)