2010-12-06 77 views
9

我正在试验git-svn,并试图想出一个相对不容易出错的工作流程。我认为以下应该工作,并且非常简单,但我见过people using far more complicated workflows,所以我想看看为什么。这个git-svn工作流程是否工作?

  1. (master) $ git svn init <path>
  2. (master) $ git svn fetch
  3. (master) $ git svn rebase
  4. (master) $ git checkout -b topic-branch
  5. (topic-branch) $ # HACK HACK COMMIT HACK HACK HACK COMMIT HACK COMMIT
  6. (topic-branch) $ git checkout master
  7. (master) $ git merge topic-branch - 这是一个快进合并,所以没有合并提交
  8. (master) $ git svn rebase
  9. (master) $ # fix conflicts
  10. (master) $ git svn dcommit
  11. GOTO 4
+0

相关:http://stackoverflow.com/questions/1129688/git-svn-workflow-feature-branches-and-merge – cregox 2011-02-14 20:16:15

回答

5

是的,这基本上是与Subversion版本库工作时我做什么。简单的关键在于让Git分支保持本地化,而不是试图将它们映射到Subversion分支。

我刚刚注意到,你直接链接到我在另一个问题上的答案。所以也许我应该多解释一下。 :)

我有时在主题分支中执行冲突解决方案,如果我期望有一些冲突的工作。否则,如果我不期望有很多冲突,我可能会先合并,然后再做git svn rebase。这并不重要。

关键的一点是,Git非常灵活,所以最低工作流程非常简单。你已经添加了一个主题分支;我已经在主题分支上添加了rebasing。

0

如果您在执行步骤时安全无虑5永远不要切换到master并执行“git svn rebase”。否则,我会建议在第5步和第6步之间做一个“git rebase master”。

2

从我的短暂经历,我做了细微的调整,以您的工作流程,并添加注释:

  1. (master) $ git svn init <path>(或(master) git svn clone <url>
  2. (master) $ git svn fetch
  3. (master) $ git svn rebase(开始循环,化解矛盾)
  4. (master) $ git checkout -B topic-branch小心之前做这个)
  5. (topic-branch) ## HACK HACK COMMIT HACK COMMIT(使用第三方)
  6. (topic-branch) $ git checkout master
  7. (master) $ git rebase topic-branch(解决冲突)
  8. (master) $ git svn rebase(解决冲突,如果有的话)
  9. (master) $ git svn dcommit小心读这里)
  10. GOTO 3(或4,如果无需再次变形)

我正在使用主人分支只是为了与SVN集成和做所有的工作主题分支,就像我相信你是。我希望这样做更有意义,因为即使它基本上是我想要的 - 我显然无法使用您的工作流程! :-)在调整

更多细节所做的:

  • 重视资本-B的步骤4,将重置话题分支所以它总是从当前SVN新。没有它的循环会打破给出一个错误“分支已经存在”。
  • 步骤7使用rebase而不是merge。是的,它可能是一个快速前进的合并,但它比对不起更安全。如果在步骤6和步骤7之间做了某些事情,则可以拍照。
  • 循环播放到3而不是4播放。另外,只是为了安全起见。似乎使用svn rebase永远不会是一种滥用,因为它总是在主上完成,所以总是有分支作为备份。