我已经使用git分叉了一个SVN项目,因为我需要添加他们不想要的特性。但同时,我希望能够继续将添加到上游版本的特性或修复添加到我的fork中(在这里它们不会冲突)。因此,我的Git项目有以下分支:
master-我实际构建和部署的分支
特征分支-我在其中工作或处理过新事物的特征分支,然后在完成时合并到主控形状。
供应商svn-我在本地唯一的git svn分支,允许我从其svn repo“git svn rebase”
供应商-我将供应商SVN合并到的本地分支。然后我将这个(供应商)分支推到公共Git回购(Github)
所以,我的流程是这样的:

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

现在,问题来了:在将它们合并到master之前,我需要检查它们所做的每一个提交(最好是单独进行,因为此时,我身后大约有20个提交)。我知道我可以运行git checkout master;git合并供应商,但这将拉入所有更改并提交它们,而我无法看到它们是否与我需要的冲突。
那么,最好的方法是什么?Git似乎是处理项目叉的一个很好的工具,因为您可以从多个回购中进行拉和推-我只是没有足够的经验来了解这样做的最佳方式。
这是我正在讨论的原始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中时,就不必再次解决它们了!

08-26 11:08