Я разветвил проект SVN с помощью Мерзавца, потому что я должен был добавить опции, которые они не хотели. Но в то же время я хотел смочь продолжить вытягивать в функциях или фиксирую это, они добавили к восходящей версии вниз в мое ветвление (где они не конфликтуют). Так, у меня есть свой проект Мерзавца со следующими ответвлениями:
Так, мой поток - что-то вроде этого:
git checkout vendor-svn
git svn rebase
git checkout vendor
git merge vendor-svn
git push origin vendor
Теперь, вопрос прибывает сюда: Я должен рассмотреть каждую фиксацию, которую они сделали (предпочтительно индивидуально с тех пор в этой точке, я - приблизительно двадцать фиксаций позади них) прежде, чем объединить их в ведущее устройство. Я знаю, что мог выполнить ведущее устройство контроля мерзавца; поставщик слияния мерзавца, но это вытянуло бы во всех изменениях и фиксировало бы их без меня способность видеть, конфликтуют ли они с тем, в чем я нуждаюсь.
Так, что лучший способ состоит в том, чтобы сделать это? Мерзавец походит на большой инструмент для обработки ветвлений проектов, так как можно вытянуть и продвинуть от нескольких repos - я просто не испытан с нею достаточно для знания лучшего способа сделать это.
Вот исходный проект SVN, о котором я говорю: https://appkonference.svn.sourceforge.net/svnroot/appkonference
Мое ветвление по github.com/jthomerson/AsteriskAudioKonf
Похоже, что вы должны просто создать ветвь 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, вам не придется решать их снова!