我正在尝试使用git-svn
,并尝试提出一个相对不容易出错的工作流程。我认为以下内容应该有效,而且非常简单,但我看过people using far more complicated workflows,所以我想知道原因。
(master) $ git svn init <path>
(master) $ git svn fetch
(master) $ git svn rebase
(master) $ git checkout -b topic-branch
(topic-branch) $ # HACK HACK COMMIT HACK HACK HACK COMMIT HACK COMMIT
(topic-branch) $ git checkout master
(master) $ git merge topic-branch
- 这是一个快进合并,因此没有合并提交(master) $ git svn rebase
(master) $ # fix conflicts
(master) $ git svn dcommit
GOTO 4
答案 0 :(得分:5)
是的,这基本上就是我在使用Subversion存储库时所做的事情。简单的关键是保持Git分支本地,而不是试图将它们映射到Subversion分支。
我刚注意到你在另一个问题中直接链接到了我的答案。所以也许我应该解释一下。 :)
如果我预计会发生一些冲突,我有时会在主题分支中进行冲突解决。否则,如果我不期望很多冲突,我可能会在执行git svn rebase
之前先合并为master。没关系。
关键是Git非常灵活,最小工作流程非常简单。你已经添加了一个主题分支;我在主题分支上添加了变基。
答案 1 :(得分:2)
根据我的简短经验,我对您的工作流程进行了微调,并添加了评论:
(master) $ git svn init <path>
(或(master) git svn clone <url>
)(master) $ git svn fetch
(master) $ git svn rebase
(开始循环,解决冲突)(master) $ git checkout -B topic-branch
(小心之前)(topic-branch) ## HACK HACK COMMIT HACK COMMIT
(使用第三方)(topic-branch) $ git checkout master
(master) $ git rebase topic-branch
(解决冲突)(master) $ git svn rebase
(解决冲突,如果有的话)(master) $ git svn dcommit
(小心在这里阅读)我正在使用 master 分支,只是为了与SVN集成并完成 topic-branch 的所有工作,就像我相信你一样。我希望这更有意义,因为我不能按照它的方式使用你的工作流程,即使它基本上是我想要的 - 显然! : - )
有关所做调整的更多详情:
-B
,它将重置主题分支,因此它始终是当前SVN的新功能。如果没有它,循环就会中断,给出错误“branch already exists”。rebase
而不是merge
。是的,它可能是一个快速合并,但它比抱歉更安全。如果在步骤6和7之间完成某事,则说明图片。svn rebase
永远不会被滥用,因为它总是在master上完成,所以总是将分支作为备份。答案 2 :(得分:0)
如果您在执行步骤5时从不切换到master并执行“git svn rebase”,那么这是安全的。否则我建议在第5步和第6步之间做一个“git rebase master”。