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

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

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

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


person Nate    schedule 14.05.2013    source источник
comment
git-svn, согласно вашему тегу ...   -  person Pete Fordham    schedule 14.05.2013


Ответы (2)


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

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

person Andomar    schedule 14.05.2013

Итак, причина, по которой я хотел избежать дополнительных репозиториев, заключалась в том, что мы используем 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 теперь будет показывать историю каждого переплетенного репо.

person Nate    schedule 23.05.2013