git remote update
相当于git fetch
?
答案 0 :(得分:139)
是和否。 git remote update
从所有遥控器中取出,而不仅仅是一个。
不查看代码以查看remote update
是否只是一个shell脚本(可能),它基本上为每个远程运行fetch。 git fetch
可以更精细。
答案 1 :(得分:98)
更新:更多信息!
我应该从一开始就做到这一点:我在Git的Git回购中抓住了Git发行说明(所以meta!)
grep --color=always -R -C30 fetch Documentation/RelNotes/* | less
然后我对less
进行了--all
搜索,这就是我在release notes for Git version 1.6.6下找到的内容:
git fetch
了解了--all
和--multiple
个选项,用于从多个存储库运行提取,以及--prune
选项用于删除过时的远程跟踪分支。这些会使git remote update
和git remote prune
变得不那么必要(虽然没有计划删除remote update
和remote prune
。
版本1.6.6直到December 23rd, 2009才被发布,原版海报于2009年12月6日提出了他的问题。
从发行说明中可以看出,Git的作者意识到git remote update
命令功能在某种程度上被git fetch
复制了,但是他们决定不删除它,可能是为了与现有的脚本和程序向后兼容,或者因为它的工作量太大而且优先级较高的项目。
有更多详情的原始答案
xenoterracide's answer现在已经有3.5岁了,从那时起Git已经经历了几个版本(截至本文撰写时它已经从v1.6.5.5变为v1.8.3.2),并且看着<对于git remote update
和git fetch
的强> 当前 文档,看起来他们 两者都可以执行从提取新提交的基本相同的功能给出正确的选项和参数,多个遥控器 。
获取多个遥控器的一种方法是使用--all
标志:
git fetch --all
这将从您配置的所有遥控器中提取,假设您没有为其设置remote.<name>.skipFetchAll
:
如果为true,则在使用git-fetch(1)或git-remote(1)的update子命令进行更新时,默认情况下将跳过此远程。 - git-config documentation
这相当于使用
git remote update
没有指定任何要提取的远程组,也没有在您的repo配置中设置remotes.default
,并且没有任何遥控器将remote.<name>.skipDefaultUpdate
设置为true。
current 1.8.3.2 documentation for Git's configuration并未提及remotes.default
设置,但我向全能的Google咨询了相关信息,并从Mislav Marohnić找到了这个有用的解释:
$ git config remotes.default 'origin mislav staging'
$ git remote update
# fetches remotes "origin", "mislav", and "staging"
您可以定义
remote update
命令要提取的默认遥控器列表。这些可以是您的团队成员,开源项目的可信社区成员或类似人员的遥控器。
因此,如果您设置了remotes.default
,并且并未在其中列出所有遥控器,那么git remote update
将无法获取您的回购信息所知道的所有遥控器&#34;意识到& #34;的。
对于remote.<name>.skipDefaultUpdate
设置,the Git docs如此解释:
如果为true,则在使用git-fetch(1)或git-remote(1)的更新子命令进行更新时,默认情况下会跳过此远程。
fetch
和remote update
允许您指定多个遥控器和遥控器组来取取所有遥控器:
git fetch [<options>] <group>
git fetch --multiple [<options>] [(<repository> | <group>)…]
git fetch [<options>] <group>
允许您获取属于组的多个遥控器(从Mislav借用另一个示例):
$ git config remotes.mygroup 'remote1 remote2 ...'
$ git fetch mygroup
git fetch --multiple
允许您指定多个存储库和存储库组,以便一次性获取(来自the docs):
允许指定多个
<repository>
和<group>
个参数。不能指定<refspec>s
。
git remote update
文档中的歧义
synopsis for git remote update
指定命令语法如下:
git remote [-v | --verbose] update [-p | --prune] [(<group> | <remote>)…]
注意最后一部分[(<group> | <remote>)…]
?尾随点...
意味着您可以使用该命令指定多个组和远程数据库,这意味着它的行为方式与git fetch --multiple
相同...请参阅两者之间的语法如何相似?
但是,在同一文档中,update
命令的解释没有说明指定多个组和远程参数,只是它
根据
remotes.<group>
的定义,获取存储库中一组命名遥控器的[es]更新。
因此,我不清楚git remote update
在指定多个单独的遥控器和多个远程组方面是否与git fetch --multiple
完全相同。
最后,每个人都知道获取单个遥控器的简单情况:
git fetch <remote>
可能您也可以使用
git remote update <remote>
做同样的事情,但正如我在上一节中提到的那样,git remote update
的文档不清楚是否可以获取除 组之外的任何内容 使用该命令的遥控器。
正如我所解释的那样,git fetch
和git remote update
在从多个遥控器获取方面表现相似。它们共享相似的语法和参数,但git fetch
更短,因此人们可能会发现它更容易键入和使用。
可能会出现git remote update
无法仅使用git fetch
来获取单个遥控器的情况,但正如我已经指出的那样,文档没有&#39}这个清楚。
<强>除了强>
Git瓷器命令之间的功能重复,例如上面的git fetch
和git remote update
,并不是唯一的。我注意到与git rebase --onto
和git cherry-pick
类似的情况,因为两者都可以进行一系列提交以修补新的基础提交。
我想,随着Git多年来的发展,一些功能(不可避免地?)重复,有时可能为最终用户提供便利(例如,将范围传递给{{1}更简单而不是一遍又一遍地传递一个提交来挑选一个范围)。显然,cherry-pick
并不总是接受一系列提交,如v1.7.2 release notes中所述:
cherry-pick
学会了选择一系列提交(例如git cherry-pick
和cherry-pick A..B
),cherry-pick --stdin
也是如此。但是,这些不支持更好的排序控制git revert
。