如何git svn获取+;在一次操作中重新设置基础?

如何git svn获取+;在一次操作中重新设置基础?,git,git-svn,Git,Git Svn,我刚刚发现,尽管git help svn中的rebase部分说 此从当前头部和头部的SVN父级获取修订 重新调整当前(未提交给SVN)工作的基础 (我强调)这并不意味着rebase包含git svn fetch。撇开命名不谈,是否有办法运行一个单一git svn命令来同时执行这两项操作 我想这样做的原因是我只在一个分支上写,所以我想rebase那个分支,并且我经常阅读其他分支,所以我想fetch那个分支 git pull --rebase 您还可以对其进行配置,使其在默认情况下重新调整。然后你

我刚刚发现,尽管git help svn中的
rebase
部分说

从当前头部和头部的SVN父级获取修订 重新调整当前(未提交给SVN)工作的基础

(我强调)这并不意味着
rebase
包含
git svn fetch
。撇开命名不谈,是否有办法运行一个单一
git svn
命令来同时执行这两项操作

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

git pull --rebase
您还可以对其进行配置,使其在默认情况下重新调整。然后你可以:

git pull
更新:

哎呀。需要更多的咖啡


我所能想到的就是编写您需要的脚本。

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

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


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

我认为你把
git-rebase
git-svn-rebase
搞混了。前者将提交到您指定的某个修订版的当前头部,而后者将当前头部移动到您所在的Subversion分支的顶端

git svn rebase
确实包含一个
git svn fetch--parent
,即它将在您当前所在的分支上获得任何新的Subversion提交,但不会从任何其他分支获得任何Subversion提交(与从所有分支获取的普通
git svn fetch


我怀疑当您执行
git svn rebase
时,您不想执行完整的
git svn fetch
,因为这意味着您需要更长的时间才能获得可用的工作副本。如果您想要常规的
git svn fetch
es,我建议您设置一个cron作业,在后台为您执行fetch操作。

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

如果您希望使用rebase实现full
fetch
,则可以调用
git svn fetch;git重新设置git svn的基础


用一种别名语言(正如公认的答案所做的那样):
git config--global alias.refetch'!git svn fetch和&git rebase git svn'

我没有使用
git svn
的经验,但是普通的
git pull
可以配置为使用
rebase
而不是
merge
,这种方式可以完成您想要的两个步骤。如果我知道如何使用
git svn
,我会发布一个答案——只需寻找一个与
git config branch.autosetuprebase always
等效的答案。试试看。首先它获取,然后它重新设定。不,它没有
git svn rebase
不从远程获取新分支,而
git svn fetch
从远程获取新分支。我刚试过。@AdamDymitruk:这不是关于香草
git
——而是关于
git svn
。很公平;看起来没有标准的方法可以做到这一点。你到底为什么要获取所有svn回购,只是为了重新设定单个的基础?@l0b0:没有标准的方法可以做到这一点,因为这不是使用
git svn
的标准方法
git svn rebase
旨在让您的当前分支达到Subversion提示,因此它会以快速获得有用的工作副本的名义忽略任何其他Subversion分支
git svn fetch
更新Subversion存储库中的所有内容,因此这通常是一个慢得多的操作。我真的很困惑你到底想实现什么,这意味着你需要能够做到这一点。为了让意图更加清晰,可以使用
alias.svnfetch
甚至
alias.svnfetchall
。通过这种方式,很明显SVN被用作传入提交的源。一开始我被
svn-rebase
的工作原理弄糊涂了。特别是考虑到没有svn的git的典型工作流。在合并之前,很容易忘记
svn获取
然后
svn重设每个分支的基础
。也许我遗漏了一些东西。这是一篇很老的帖子,但我觉得它仍然有意义。我绝对希望在做git svn重基之前获得所有分支更新。为什么?因为如果不这样做,我在合并时会遇到很多问题。在合并之前,很容易忘记获取要合并的每个分支,并执行以下操作:
git svn rebase&&git checkout master&&git merge feature
,然后才意识到没有从svn更新正确的分支。如果使用git svn支持更好的分支,那么在重定基址之前总是
git svn获取所有内容是有意义的。如果您没有
git svn dcommit
stomps处理所有事务。如果svn repo中有太多分支并且需要花费很长时间,则从
分支:
配置行中删除
*
,只处理您通常处理的分支。如果您正在做一个
master->dev->feature
组合,那么使用通配符和git配置文件只处理那些分支就很容易了。这样,当您
git svn fetch
时,就不会得到不需要的分支
git-svn-rebase
完全打破了我过去的git和svn-repo,因为它没有svn提前获取分支。这对我来说翻译不好。我可能是这里的少数派。