繁体   English   中英

使用Git分叉SVN项目的最佳方法

[英]Best way to fork SVN project with Git

我使用Git分叉了一个SVN项目,因为我需要添加他们不想要的功能。 但与此同时,我希望能够继续将他们添加到上游版本的功能或修复功能下载到我的分支中(它们不会发生冲突)。 所以,我有我的Git项目与以下分支:

  • master - 我实际构建和部署的分支
  • feature _ *** - 功能分支,我工作或处理新事物,然后在完成时合并为主
  • vendor-svn - 我的本地唯一的git-svn分支,它允许我从他们的svn repo“git svn rebase”
  • 供应商 - 我将vendor-svn合并到的本地分支机构。 然后我推动这个(供应商)分支到公共git repo(github)

所以,我的流程是这样的:

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

现在,问题出现在这里:我需要检查他们所做的每个提交(最好是单独的,因为此时我在他们后面约有二十个提交) 然后再将它们合并到master中。 我知道我可以运行git checkout master; git merge vendor ,但是这会引入所有更改并提交它们,而我无法看到它们是否与我需要的内容冲突。

那么,最好的方法是什么? 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时,您将不必再次解决它们!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM