Лучший способ разветвить проект SVN с Мерзавцем

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

  • ведущее устройство - ответвление я на самом деле создаю и развертываюсь от
  • feature_ *** - ответвления функции, где я работаю или работал над новыми вещами, которые я затем объединяю с ведущим устройством, когда завершенный
  • поставщик-svn - мое локально-единственное ответвление мерзавца-svn, которое разрешает меня "мерзавцу svn переоснова" от их svn repo
  • поставщик - мое локальное ответвление, в которое я объединяю поставщика-svn. затем я продвигаю этот (поставщик) ответвление общедоступному мерзавцу repo (GitHub)

Так, мой поток - что-то вроде этого:

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

15
задан Cascabel 6 May 2010 в 19:35
поделиться

1 ответ

Похоже, что вы должны просто создать ветвь 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, вам не придется решать их снова!

6
ответ дан 1 December 2019 в 05:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: