Перенос определенных папок из SVN в Git

У меня есть репозиторий SVN, который выглядит так:

  • Trunk:
    • dir_1
    • dir_2
    • dir_3
    • dir_4
    • dir_5
    • dir_6

и я хочу перенести только каталоги dir_1, dir_2 и dir_5 в новый репозиторий Git, включая все ветки и историю этих каталогов. так что результат будет:

  • владелец:

    • dir_1
    • dir_2
    • dir_5

Это возможно?


person Omri Shneor    schedule 12.03.2017    source источник
comment
Где живут ветки?   -  person chepner    schedule 12.03.2017
comment
Речь идет об однократной миграции, после которой вы будете использовать только Git, или вы хотите вернуться в SVN из клона Git?   -  person Vampire    schedule 14.03.2017
comment
это разовая миграция, и мы намерены использовать Git только после этой миграции.   -  person Omri Shneor    schedule 16.03.2017


Ответы (1)


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

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

Вы сможете легко настроить файл правил svn2gits для получения желаемого результата.

Если вы не на 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 хуже, а KDE svn2git лучше. :-)

person Vampire    schedule 14.03.2017