我使用 Git 分叉了一个 SVN 项目,因为我需要添加他们不想要的功能。但与此同时,我希望能够继续将他们添加到上游版本的功能或修复引入到我的分支中(它们不冲突)。因此,我的 Git 项目具有以下分支:
- master - 我实际构建和部署的分支
- feature_*** - 我工作或曾经从事新事物的功能分支,然后在完成后将其合并到 master
- vendor-svn - 我的本地 git-svn 分支,允许我从他们的 svn 存储库中“git svn rebase”
- vendor - 我将vendor-svn合并到的本地分支。然后我将这个(供应商)分支推送到公共 git 存储库(github)
所以,我的流程是这样的:
git checkout vendor-svn
git svn rebase
git checkout vendor
git merge vendor-svn
git push origin vendor
现在,问题来了:我需要审查他们所做的每个提交(最好是单独审查,因为此时我大约落后于他们二十个提交)before将它们合并到 master 中。我知道我可以跑git checkout 大师; git 合并供应商,但这会引入所有更改并提交它们,而我无法查看它们是否与我需要的相冲突。
那么,最好的方法是什么? Git 似乎是处理项目分支的一个很好的工具,因为你可以从多个存储库中拉取和推送 - 我只是没有足够的经验来知道执行此操作的最佳方法。
这是我正在谈论的原始 SVN 项目:https://appkonference.svn.sourceforge.net/svnroot/appkonference https://appkonference.svn.sourceforge.net/svnroot/appkonference
我的叉子在github.com/jtomerson/AsteriskAudioKonf http://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 时,您将不必再次解决它们!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)