15

我正在开发一个使用 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

假设没有人在 and 之间提交 svn git svn fetch,那么 run on master 和git svn rebaserun on master 基本一样吗?git svn rebasegit rebase trunk

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

4

1 回答 1

19

请注意,来自git svn,详见“为什么用 git-svn 颠倒“我们的”和“他们的”的含义

git svn rebase

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

所以你不需要andgit svn fetch之前的,特别是如果你只跟踪(父级)。git checkout mastergit svn rebasetrunkmaster


第二点,git svn dcommit将在 SVN 中为每个新提交创建修订master,但您的工作流程不会显示任何新提交master,仅显示topic(从未合并master


OP Sean McMillan评论:

根据文档,git svn dcommit如果没有指定分支,则将提交推送到当前 HEAD,而不仅仅是master. 所以我从我的分支提交到 SVN,然后依靠 a将提交从 SVN 带回来git svn rebasemaster之后我放弃了topic分支dcommited。这不是犹太洁食吗?

他详细说明:

我还不能将它们发送到 SVN...。上游想要“冻结”主干以进行发布,同时,我正在为下一个版本开发功能。

但最终的问题是,“ git rebase trunk master 是否与 master 分支上的 git svn rebase 相同? ”如果是,那么我不需要不断更改我的分支,只需针对 SVN 重新设置我的 master 分支。但如果不是,并且当我 git svn rebase 时发生了某种魔法,我想知道。

我回复:

Agit svn fetch后跟 agit rebase trunk master将等效于 a git svn rebase

于 2012-05-18T12:07:57.177 回答