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