我正在开发一个将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 fetch
和git svn rebase
之间提交svn,
在{2}上运行的git svn rebase
与在主服务器上运行的git rebase trunk
基本相同吗?
是否有更明智的工作流程可供使用?似乎有很多不断变化的分支和变基。我知道我希望能够在svn中的任何内容之上重新调整我的工作,但似乎我做的更多的是基于必要的更多。
答案 0 :(得分:17)
注意,来自git svn,详见“Why is the meaning of “ours” and “theirs” reversed with git-svn”:
git svn rebase
这将从当前HEAD的SVN父级获取修订,并针对它重新定义当前(未提交到SVN)的工作。
因此,您git svn fetch
和git checkout master
之前不需要git svn rebase
,特别是如果您只跟踪trunk
({1}}的父级)。< / p>
第二点,master
将为git svn dcommit
上的每个新提交在SVN中创建修订,但您的工作流不会在master
上显示任何新提交,仅在{{1 (master
上没有合并)
根据文档,没有指定分支的
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
。