2009-09-29 3 views
1

Отказ от ответственности: все было бы проще, если бы я знал о git-svn в начале.SVN to git ... теперь git для SVN. Столько конфликтов

У меня была большая кодовая база в SVN, и грубо она попала в git. Жизненный труд был очень болезненным без быстрого, эффективного ветвления, так что все это было достигнуто в какой-то спешке. Мой процесс был:

svn export 
git init . 
git add . 
git commit -a -m "initial commit" 

Теперь я закончил свои проекты с маленькими филиалами. Я смог «бороться с пожарами» в чистой ветке и заниматься развитием других. Это было здорово. Мои ветви теперь объединены обратно в один, и я готов вернуть этот код в SVN.

Теперь я немного поработал с git-svn, получив настройку svn repo и выбрав. Но это насколько я могу получить.

Предполагая, что мой GIT филиала является «мастером», и мой ГИТ-SVN репо «svnrepo»:

git checkout master 
git rebase svnrepo 

терпит неудачу и бросает массу конфликтов слияния и «уже существует в индексе» ошибках.

git checkout svnrepo 
git rebase master 

не соответствует точно так же.

Как сохранить историю Git и вернуть этот код в SVN?

ответ

1

Я бы выполнил последовательность операций git cherry-pick на вашей ветке «svnrepo», чтобы переместить каждую соответствующую фиксацию из ветки «master» (начиная с самого старого). Сбор вишни в значительной степени агностик относительно происхождения каждой фиксации и попытается применить патч, не заботясь о том, откуда он появился. После того, как вы закончите сбор вишни и все коммиты, используйте git svn dcommit, чтобы передать их в Subversion.

Обратите внимание, что если у вас есть какая-либо нелинейная история на ветке «master», вам нужно попытаться сгладить это, прежде чем нажимать ваш код обратно на Subversion. Это может потребовать немного дополнительной работы, но поскольку Subversion не поддерживает нелинейную историю, это в значительной степени необходимый шаг.