Могу ли я заставить git-svn импортировать репозиторий Subversion, который сам содержит репозитории git - PullRequest
1 голос
/ 04 июня 2009

У меня есть проект в SVN, в котором есть папка плагинов. Некоторые из папок плагинов являются репозиториями git - я добавил их в папку плагинов, используя git clone.

Это хорошо работает для меня, но теперь я хочу перенести мой SVN-репозиторий в git, используя git-svn:

git svn init http://path/to/my/repo --no-metadata 
git config svn.authorsfile ~/authors.txt
git svn fetch

Это прекрасно работает для всех моих ранних ревизий, в которых не было репозиториев git в моей папке плагинов, но при попадании в первую ревизию, содержащую репозиторий git, происходит сбой со следующей ошибкой:

trunk/plugins/my_plugin/.git/HEAD was not found in commit 
ae9ad0ab7cebd144c823d90d43cdab2b30d13f9e (r2259)

Есть ли способ обойти это, чтобы позволить мне полностью импортировать мой репозиторий, возможно, путем исключения любых папок .git, которые находятся в репозитории SVN?

Ответы [ 3 ]

4 голосов
/ 04 июня 2009

Оказывается, я использовал git-svn 1.5 в Ubuntu, который не поддерживал флаг --ignore-paths на git-svn fetch. После сборки git 1.6 из исходного кода теперь я могу запустить:

git svn fetch --ignore-paths='\.git'

Извлечение теперь игнорирует все папки .git и успешно импортирует всю историю SVN в мой новый Git-репозиторий.

1 голос
/ 04 июня 2009

Вы можете вывести текущий репозиторий svn, filter из каталогов .git, создать еще одно репозиторий svn на основе этого отфильтрованного дампа и использовать его в качестве основы для репозитория git.

Параллельное использование git и svn, вероятно, будет интересным - вам придется заменить существующее репо на новое gitless, а отсутствующие каталоги .git могут вызвать некоторые хлопоты.

Я не пробовал этого, так что вам нужно быть осторожным и иметь резервные копии.

0 голосов
/ 04 июня 2009

Из-за того, как работает Git, наличие более 1 папки .git вызовет у вас проблемы (ну, вы уже знаете, хе-хе).

У вас есть 2 варианта: - если вам наплевать на историю, сделайте это простым способом: удалите папки .git из svn и перейдите в полный проект git

  • если вам небезразлична история, сделайте ее нелегко: проверьте эту ссылку и выполните шаги

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

РЕДАКТИРОВАТЬ: Я забыл упомянуть другой способ: вы можете использовать Bazaar , чтобы тянуть проект, поскольку он взаимодействует с обоими. Не уверен, что это будет проще, хотя

...