如何在一次操作中git获取svn fetch + rebase?

时间:2012-03-21 15:16:10

标签: git git-svn

我刚刚发现即使rebase中的git help svn部分说

  

从当前HEAD的SVN父级获取修订版本   将当前(未提交到SVN)的工作重新加以反对。

(我的重点)并不意味着rebase 包含一个git svn fetch。除了命名,有没有办法运行git svn命令来同时执行

我想这样做的原因是我只在一个分支上写,所以我想rebase那个,我经常读取其他分支 ,所以我想fetch那些。

4 个答案:

答案 0 :(得分:20)

我认为你让git rebasegit svn rebase感到困惑。前一个移动会将您当前的HEAD提交到您指定的某个修订版,而后者会将您当前的HEAD移动到您所在的Subversion分支的顶端。

git svn rebase 包含git svn fetch --parent,即它将在您当前所在的分支上获得任何新的Subversion提交,但不会从任何其他分支进行任何Subversion提交(与从所有分支取得的普通git svn fetch形成对比)。

我怀疑你做git svn fetch时不想做一个完整的git svn rebase,因为这意味着在获得可用的工作副本之前它会更长。如果您想要定期git svn fetch es,我建议您设置一个cron作业,为您在后台进行提取。

答案 1 :(得分:8)

听到这实际上是它的行为方式,我也有点惊讶。但是,要回答你的问题,你只需要定义一个别名:

git config --global alias.refetch '!git svn fetch && git svn rebase'

然后git refetch应该做你想做的事。

答案 2 :(得分:0)

我不知道问这个问题时这是否可行,但我认为 git svn rebase 确实 git svn fetch --parent ; git rebase git-svn。至少这对我有用。 git svn 似乎创建了名为 gitgit-svn 伪分支,可以使用 git 与之交互。但是这个分支不能被普通的 git 修改。

如果您想要带有变基的完整 fetch,您可以调用 git svn fetch ; git rebase git-svn

把它放在别名语言中(正如公认的答案所做的那样):git config --global alias.refetch '!git svn fetch && git rebase git-svn'

答案 3 :(得分:-3)

git pull --rebase

您也可以对其进行配置,以便默认情况下进行重新定位。然后你可以:

git pull

更新:

糟糕。需要更多咖啡......

我能想到的就是编写你需要的东西..