git svn clone - Как конвертировать удаленные Subversion в локальные Git (Windows) - PullRequest
0 голосов
/ 01 февраля 2019

Я пытался следовать официальным инструкциям Git о том, как выполнить однократную одностороннюю миграцию проекта из Subversion в Git.Я пытался сделать это несколько раз, с немного другими параметрами, но я не получил ожидаемого результата.

Инструкции предполагают, что импортированные теги и ветви Subversion должны появляться здесь во вновь созданном локальномGit repo после завершения процедуры импорта:

my-new-local-git-repo\.git\refs\remotes

Но теги / ответвления Subversion действительно существуют здесь:

my-new-local-git-repo\.git\svn\refs\remotes\origin

Я подозреваю, что поэтому инструкции по очистке после импорта не являютсяработает на меня.Я не знаю, допустил ли я ошибку в команде / опциях, которые я использовал для выполнения импорта, если инструкции устарели или я ошибаюсь в другом месте.

Это команда, которую я использовал для создания этого перенесенного репозитория Subversion-to-Git:

git svn clone --stdlayout --authors-file=users.txt http://svn/repo/root/MyProjectInSVN/ new-local-git-repo

Вот несколько скриншотов того, как выглядят результирующие локальные ссылки на удаленные репозитории Git:

screenshot 1

screenshot 2

Любые предложения о том, как преобразовать эти импортированные удаленные ветви и теги Subversion в локальные ветви и теги GitБуду очень признателен!

1 Ответ

0 голосов
/ 02 февраля 2019

Git использует два местоположения для хранения ссылок (т. Е. Ветки, теги, ...): сначала он сохраняет каждый реф как отдельный файл ниже .git/refs.Через некоторое время и / или если накопилось много ссылок, git pack-refs упаковывает текущее состояние в один файл .git/packed-refs.git pack-refs вызывается git gc, который, в свою очередь, автоматически выполняется некоторыми командами git.

Так что это не ошибка, что .git/refs не содержит ваши ветви.Окончательная команда для получения всех ссылок: git for-each-ref.

git svn сохраняет дополнительные данные в git/svn, но не ссылки как таковые.

Еслипостобработка не работала Я предполагаю, что шаблоны для ссылок не совпадали.Поэтому сравните вывод git for-each-ref со строками в командах: refs/remotes/tags и refs/remotes.

...