`git svn rebase` vs`git rebase trunk`

时间:2012-05-15 18:16:54

标签: git svn rebase

我正在开发一个将subversion用于其存储库的项目。因为我需要进行一些无法发送到svn服务器的更改,所以我开始使用git svn以便我可以进行本地签入。我的设置如下:

分支机构:主干(跟踪svn主干),主机(非常接近svn中的内容)和主题。

*------------------ trunk
 \
  *-----------*--------- master
               \
                *-------- topic

工作流:

[on branch master]
$ git svn fetch
$ git svn rebase
$ git checkout -b topic
$ git rebase master
[hack hack hack]
$ git commit -a
[once upstream is ready for my changes]
$ git svn fetch
$ git checkout master
$ git svn rebase
$ git checkout topic
$ git rebase master
$ git svn dcommit
$ git checkout master
$ git svn rebase
$ git branch -d topic

假设没有人在git svn fetchgit svn rebase之间提交svn, 在{2}上运行的git svn rebase与在主服务器上运行的git rebase trunk基本相同吗?

是否有更明智的工作流程可供使用?似乎有很多不断变化的分支和变基。我知道我希望能够在svn中的任何内容之上重新调整我的工作,但似乎我做的更多的是基于必要的更多。

1 个答案:

答案 0 :(得分:17)

注意,来自git svn,详见“Why is the meaning of “ours” and “theirs” reversed with git-svn”:

git svn rebase
  

这将从当前HEAD的SVN父级获取修订,并针对它重新定义当前(未提交到SVN)的工作。

因此,您git svn fetchgit checkout master之前不需要git svn rebase,特别是如果您只跟踪trunk({1}}的父级)。< / p>


第二点,master将为git svn dcommit上的每个新提交在SVN中创建修订,但您的工作流不会在master上显示任何新提交,仅在{{1 (master上没有合并)


OP Sean McMillan评论:

  

根据文档,没有指定分支的topic会推送当前HEAD上的提交,而不仅仅是master上的提交。所以我从我的分支机构提交SVN,然后依靠git svn dcommit master来从SVN返回提交。在我git svn rebase之后,我放弃了master分支。这不是犹太人吗?

他详细说明:

  

我无法将它们发送给SVN ......上游希望“冻结”主干发布,同时,我正在为下一个版本开发功能。

     

但最终的问题是,“是git rebase trunk master和master分支上的git svn rebase相同吗?”如果是,那么我不需要经常更改我的分支,只是为了反对我的主分支对抗SVN。但是,如果不是,并且当我git svn rebase时会发生某种魔法,我想知道。

我回复:

topic后跟dcommited,相当于git svn fetch