Лучший способ развить проект SVN с помощью Git - PullRequest
15 голосов
/ 06 мая 2010

Я разработал проект SVN с использованием Git, потому что мне нужно было добавить функции, которые им не нужны.Но в то же время я хотел иметь возможность продолжать добавлять функции или исправления, которые они добавили в предыдущую версию, в мой форк (где они не конфликтуют).Итак, у меня есть проект Git со следующими ветками:

  • master - ветвь, которую я на самом деле строю и развертываю из
  • feature _ *** - ветви функций, в которых я работаю или работало новых вещах, которые я затем объединяю с мастером по завершении
  • vendor-svn - моя локальная ветка git-svn, которая позволяет мне "git svn rebase" из их svn repo
  • vendor- мой местный филиал, в который я объединяю vendor-svn.затем я помещаю эту ветку (вендора) в общедоступное git-репо (github)

Итак, мой поток выглядит примерно так:

git checkout vendor-svn
git svn rebase
git checkout vendor
git merge vendor-svn
git push origin vendor

Теперь возникает вопрос:Мне нужно просмотреть каждый сделанный им коммит (желательно индивидуально, так как на данный момент у меня около двадцати коммитов за ним) до слияния их с мастером.Я знаю, что могу запустить git checkout master;git merge vendor , но это повлечет за собой все изменения и зафиксирует их, и я не смогу увидеть, конфликтуют ли они с тем, что мне нужно.

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

Вот оригинальный проект SVNЯ говорю о: https://appkonference.svn.sourceforge.net/svnroot/appkonference

Мой форк находится на github.com / jthomerson / AsteriskAudioKonf

1 Ответ

6 голосов
/ 06 мая 2010

Похоже, вы должны просто создать ветку master для своего тестирования:

git checkout -b testing master
git merge vendor-svn
# test...
git checkout master
git merge testing

Или, если вы хотите проверить отдельные коммиты, вы можете объединить их все по отдельности:

git checkout -b testing master
git log --pretty=%H testing..version-svn | while read commit; do git merge $commit || break; done
# now go check out and test each merge that was created

Или по одному:

git checkout -b testing master
git merge $(git log --pretty=%H testing..version-svn | tail -n 1)
# now test the result, and if you're okay...
# run the merge command again to merge the next commit
git merge $(git log --pretty=%H testing..version-svn | tail -n 1)
# and so on

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

В любом случае убедитесь, что для rerere.enabled установлено значение true, чтобы git запомнил, как вы разрешили конфликты, и когда вы вернетесь назад и вернете слияние прямо в master, вам не придется решать их снова!

...