git远程更新和获取之间的区别?
git remote update
相当于git fetch
?
更新:更多信息!
我应该从一开始就做到这一点:我在Git的Git仓库中引入了Git发行说明(所以meta!)
grep --color=always -R -C30 fetch Documentation/RelNotes/* | less
然后,我做了一个less
search – 所有,这是我发现在Git版本1.6.6的发行说明 :
git fetch
学习了--all
和--multiple
选项,从许多存储库运行获取,–--prune
选项删除过时的远程跟踪分支。 这些使得git remote update
和git 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子命令进行更新时,该远程将默认跳过。
获取指定的一组遥控器
取而代之的是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
允许您指定几个存储库和存储库组(从文档中 )一次获取:
允许指定几个
<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 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
那样用来获取一个单一的远程,但正如我已经指出的那样,文档没有说清楚。
在旁边
Git瓷器命令之间的function重复,例如上面的git fetch
和git remote update
,并不是唯一的。 我注意到git rebase --onto
和git cherry-pick
也有类似的情况,两者都可以通过一系列的提交来修补一个新的基本提交。
我想,随着Git这些年来的发展,一些function(不可避免地?)被重复,有时也许是为了方便最终用户(例如,通过一个范围来cherry-pick
,比传递一个提交更简单一遍又一遍地select一个范围)。 显然, cherry-pick
并不总是接受一系列的提交,如v1.7.2发行说明中所解释的:
git cherry-pick
学会了挑选一系列的提交(例如cherry-pick A..B
和cherry-pick --stdin
cherry-pick A..B
),git revert
; 尽pipe如此,这些不支持更好的测序控制rebase [-i]
。
是和不是。 git remote update
从所有遥控器中获取,而不仅仅是一个。
如果不查看代码来查看remote update
是否仅仅是一个shell脚本(可能),它基本上会为每个远程程序运行提取。 git fetch
可以更加细化。