"git pull <remote> master" в подкаталог

Фон:

Я пытаюсь переместить пакет из репозитория SVN в репозиторий GIT, сохраняя при этом его историю.

Шаги:

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

Я хотел бы переместить этот пакет в его собственный подкаталог в git-хранилище назначения. Тем не менее, я застрял на этом этапе: git pull <remote> master --allow-unrelated-histories

Это вытягивает код в каталог git верхнего уровня. Как вместо этого вытащить этот код в подкаталог?

Я попробовал следующее на основе некоторых ответов SO, но это не сработало:

  • git pull -work-tree <working_dir> -git-dir <working_dir> <remote> master
  • git pull -s subtree -Xsubtree=<path_prefix> <remote> master

Шаг очистки:

Пакет будет храниться в GIT-репозитории назначения, поэтому я намерен:

  • удалите его из репозитория SVN.
  • А также удалите промежуточное GIT-репо, которое не потребуется после перемещения пакета.

2 ответа

Решение

Если вы хотите импортировать эту историю SVN в свою собственную подпапку, вам необходимо импортировать ее в отдельное git-репо.

Тогда ты можешь

Та ссылка, которую вы цитируете, не имеет ничего общего с SVN.

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

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

Вы легко сможете настроить svn2git Файл правил, позволяющий получить желаемый результат из текущей компоновки SVN, включая любые сложные истории, подобные вашей, которые могут существовать, включая создание нескольких репозиториев Git из одного репозитория SVN или чистое объединение различных репозиториев SVN в одно репозиторий Git за один прогон, если вы лайк.

Если вы не на 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 выше.:-)

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