git help svn
中的rebase
部分说:
这个命令获取当前HEAD的SVN父级版本,并将当前(未提交到SVN)的工作与之合并。
(我强调了一下)但是这并不意味着rebase
包括git svn fetch
。抛开命名不谈,有没有一种方法可以运行一个git svn
命令来同时完成两者?
我想这样做的原因是我只在一个分支上写作,所以我想对那一个分支进行rebase
,而我经常阅读其他分支,所以我想fetch
它们。
我认为你混淆了git rebase
和git svn rebase
。前者将提交移到你指定的修订版上,而后者将当前HEAD移动到你所在的Subversion分支的末端。
git svn rebase
确实包括一个git svn fetch --parent
,也就是说它会获取你当前所在分支上的任何新的Subversion提交,但不会获取来自其他分支的Subversion提交(与普通的git svn fetch
相比,后者会从所有分支中获取)。
我猜想你在做git svn rebase
时不想执行完整的git svn fetch
,因为这意味着在你获取可用工作副本之前需要更长时间。如果你想要定期执行git svn fetch
,我建议设置一个cron job在后台为你完成fetch操作。
git svn rebase && git checkout master && git merge feature
,最后才意识到没有从 SVN 更新正确的分支。如果使用 git svn 支持更好的分支管理,始终 git svn fetch
所有内容再进行变基是有道理的。如果不这样做,git svn dcommit
将覆盖一切。 - Andrew T Finnell听到这实际上是它的行为方式,我也有点惊讶。 但是,回答您的问题,您只需要定义一个别名:
git config --global alias.refetch '!git svn fetch && git svn rebase'
然后,git refetch
就可以完成你想要的操作。
git svn
的标准方式。git svn rebase
旨在将您当前的分支更新到Subversion的最新版本,因此忽略了任何其他Subversion分支,以便快速获取有用的工作副本。git svn fetch
会从Subversion存储库更新所有内容,因此通常是一个更慢的操作。我真的很困惑您实际上想要实现什么,这意味着您需要能够这样做。 - me_andalias.svnfetch
甚至alias.svnfetchall
。这样就清楚地表明了SVN被用作传入提交的源。一开始我对svn rebase
的工作方式感到困惑,特别是考虑到没有SVN的git的典型工作流程。在合并之前,很容易忘记在每个分支上执行svn fetch
然后svn rebase
。也许我漏掉了什么。 - Andrew T Finnell我不知道在这个问题被提出的时候是否可能,但我认为 git svn rebase
等同于 git svn fetch --parent ; git rebase git-svn
。至少对我来说是这样的。似乎 git svn
创建了一个名为 git-svn
的假分支,可以使用 git
进行交互。但是,该分支不能仅通过 git
进行修改。
如果您想要完整的 fetch
和 rebase
,则应调用 git svn fetch ; git rebase git-svn
。
换言之,根据别名(就像被接受的答案所示):git config --global alias.refetch '!git svn fetch && git rebase git-svn'
git pull --rebase
git pull
更新:
哎呀,需要更多的咖啡...
我能想到的就是编写你所需的脚本...
git
- 而是关于git svn
。 - l0b0
git svn
没有经验,但普通的git pull
可以配置为使用rebase
而不是merge
,这样可以完成你想要的两个步骤。如果我知道如何在git svn
中执行相当于git config branch.autosetuprebase always
的操作,我会发布一个答案。 - Daniel Böhmergit svn rebase
不会从远程获取新的分支,而git svn fetch
会。我刚试过了。 - l0b0