Есть ли способ объединить историю коммитов из репозитория SVN в ветку Git?

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

При проведении исследований я думаю, что я хочу достичь, чтобы иметь ветку Git поддерева для каждого репозитория SVN, которая имеет всю историю коммитов. Но git-svn, похоже, позволяет мне связать только 1 репозиторий SVN с 1 репозиторием Git, поэтому мне придется сначала создать git репо для каждого проекта, а затем преобразовать в поддерево в конечном репо. (Я думаю)

Есть ли способ объединить историю из репозитория SVN непосредственно в ветку в моем репозитории Git, чтобы я мог эффективно пропустить этап создания избыточных репозиториев Git?

2 ответа

Решение

Итак, причина, по которой я хотел избежать дополнительных репозиториев, заключалась в том, что мы используем GitHub для хранения наших репозиториев, а дополнительные репозитории, которые мне нужно было бы создать, поставили бы нас за пределы нашего текущего плана.

Таким образом, хитрость, как я выяснил, заключается в том, чтобы сохранить все репозитории локальными. Я знал, что это возможно, но не знал, как ссылаться на локальные репозитории. Оказывается, это не могло быть проще! Вот шаги, которые я прошел:

Для каждого хранилища SVN:

git svn clone http://svnhost.com/path/to/svn/repo

Это создаст локальное Git-репо со всей историей из SVN (даже временные метки сохраняются!!). Затем перейдите к репо, с которым вы хотите слить его. Создайте ветку и извлеките код из:

git checkout -b newsvnbranch1
git pull path_to_newsvnbranch1_git_repo

Теперь, остальные шаги не являются частью первоначального вопроса, но они были конечной целью, которую мне нужно было достичь - все репозитории и истории SVN слились воедино, но в своих собственных каталогах.

git mv trunk newname1
git checkout master
git merge newsvnbranch1

Выполнение этих шагов для каждого репозитория SVN по существу оставляет исходное репозиторий Git следующей структуры:

original
|-newname1  (containing the contents of the first SVN repo)
|-newname2  (containing the contents of the second SVN repo)
|-newname3  (and so on...)

А также, git log теперь будет показывать историю каждого репо переплетены.

В git все проще. Я бы использовал такой инструмент, как git2svn импортировать репозитории Subversion в git.

В Git вы можете настроить новый репозиторий с ветками. Вы можете настроить каждую ветку для отслеживания одного преобразованного хранилища Subversion. После того, как вы получили наборы изменений, вы можете очистить удаленное отслеживание с помощью git remote remove, Это оставляет вам хранилище с различными наборами изменений из Subversion на ветках.

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