git远程更新和获取之间的区别?

git remote update相当于git fetch

更新:更多信息!

我应该从一开始就做到这一点:我在Git的Git仓库中引入了Git发行说明(所以meta!)

 grep --color=always -R -C30 fetch Documentation/RelNotes/* | less 

然后,我做了一个lesssearch – 所有,这是我发现在Git版本1.6.6的发行说明 :

git fetch学习了--all--multiple选项,从许多存储库运行获取,– --prune选项删除过时的远程跟踪分支。 这些使得git remote updategit remote prune更不必要(虽然没有计划去除remote update也没有remote prune )。

版本1.6.6直到2009年12月23日才发布,原始海报于2009年12月6日提出问题。

因此,从发行说明中可以看出,Git的作者意识到git remote update命令的function被git fetch复制了一些,但是他们决定不删除它,可能是为了向后兼容现有的脚本,程序,也可能是因为工作太多,优先级高。


与更多细节的原始答案

异噻托溴素的答案现在已经有3.5年的历史了,从那时起Git已经经历了几个版本(从本书开始 ,它已经从v1.6.5.5到v1.8.3.2),并查看了最新git remote update文档, git fetch ,看起来他们都可以执行基本相同的function,从多个遥控器获取新的提交 ,给出正确的选项和参数。

获取所有遥控器

获取多个遥控器的一种方法是使用--all标志:

 git fetch --all 

这将从所有configuration的遥控器中获取,假设你没有为它们设置remote.<name>.skipFetchAll

如果为true,则在使用git-fetch(1)或git-remote(1)的update子命令进行更新时,该远程将默认跳过。 – git-config文档

这将相当于使用

 git remote update 

而不指定任何远程组来获取,也没有在你的回购configurationremotes.default设置,也没有你的遥控器有remote.<name>.skipDefaultUpdate设置为true。

目前的Gitconfiguration1.8.3.2文档没有提到remotes.default设置,但是我向全能的Google咨询了一下,发现了MislavMarohnić的这个有用的解释:

 $ git config remotes.default 'origin mislav staging' $ git remote update # fetches remotes "origin", "mislav", and "staging" 

您可以定义remote update命令获取的遥控器默认列表。 这些可以是来自队友的遥控器,开源项目的可信社区成员或类似人员。

所以大概假如你有remotes.default设置,而不是所有的遥控器都列在里面,那么git remote update将不能获取你的repo“知道”的所有遥控器。

至于remote.<name>.skipDefaultUpdate设置, Git文档如下解释:

如果为true,则在使用git-fetch(1)或git-remote(1)的update子命令进行更新时,该远程将默认跳过。

获取指定的一组遥控器

取而代之的是fetchremote 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允许您指定几个存储库和存储库组(从文档中 )一次获取:

允许指定几个<repository><group>参数。 没有<refspec>s可能被指定。

git remote update文档中的歧义

git remote update的大纲指定命令语法如下:

 git remote [-v | --verbose] update [-p | --prune] [(<group> | <remote>)…] 

注意最后一部分, [(<group> | <remote>)…] ? 尾随的点...暗示你可以指定多个组和远程命令,这将意味着它的行为方式与git fetch --multiple …看看两者之间的语法如此相似?

但是,在同一个文档中, update命令的解释并没有提到关于指定多个组和远程参数的事情

根据remotes.<group>定义,获取存储库中一组指定遥控器的[es]更新。

所以目前还不清楚,如果git remote updategit fetch --multiple相同,就指定多个个人远程和多个远程组而言。

获取一个遥控器

最后,大家都知道一个简单的例子:

 git fetch <remote> 

这可能是你也可以使用的情况

 git remote update <remote> 

做同样的事情,但正如我在前面提到的, git remote update的文档不清楚是否有可能通过命令获取单个远程以外的其他东西。

包起来

正如我所解释的, git fetchgit remote update在从多个遥控器获取方面的行为类似。 他们共享类似的语法和参数,虽然git fetch较短,所以人们可能会觉得更容易打字和使用。

可能是这样的情况, git remote update不能像git fetch那样用来获取一个单一的远程,但正如我已经指出的那样,文档没有说清楚。

在旁边

Git瓷器命令之间的function重复,例如上面的git fetchgit remote update ,并不是唯一的。 我注意到git rebase --ontogit cherry-pick也有类似的情况,两者都可以通过一系列的提交来修补一个新的基本提交。

我想,随着Git这些年来的发展,一些function(不可避免地?)被重复,有时也许是为了方便最终用户(例如,通过一个范围来cherry-pick ,比传递一个提交更简单一遍又一遍地select一个范围)。 显然, cherry-pick并不总是接受一系列的提交,如v1.7.2发行说明中所解释的:

git cherry-pick学会了挑选一系列的提交(例如cherry-pick A..Bcherry-pick --stdin cherry-pick A..B ), git revert ; 尽pipe如此,这些不支持更好的测序控制rebase [-i]

是和不是。 git remote update从所有遥控器中获取,而不仅仅是一个。

如果不查看代码来查看remote update是否仅仅是一个shell脚本(可能),它基本上会为每个远程程序运行提取。 git fetch可以更加细化。