git remote update是否等于git fetch?
git remote update
git fetch
是或否。git remote update从所有远程设备获取,而不是只从一个远程设备获取。
不需要查看代码来确定remote update是否只是一个shell脚本(可能),它基本上为每个远程操作运行fetch.git fetch可以更细粒度。
remote update
更新:更多信息!
我应该从一开始就这样做:我在Git的Git repo(So Meta!)中查看了Git发行说明。
grep --color=always -R -C30 fetch Documentation/RelNotes/* | less
然后我用less搜索--all,这是我在Git 1.6.6版发行说明下找到的:
less
--all
git fetch学习--all和--multiple选项,以运行从许多存储库中获取,并--prune选项以删除过时的远程跟踪分支。这使得git remote update和git remote prune不太必要(尽管没有计划移除remote update或remote prune)。
--multiple
--prune
git remote prune
remote prune
版本1.6.6直到2009年12月23日才发布,最初的发帖人在2009年12月6日提出了他的问题。
因此,正如您在发行说明中所看到的,Git的作者意识到__abc0命令功能在某种程度上与__abc1重复,但他们决定不删除它,可能是为了与现有脚本和程序向后兼容,也可能是因为它的工作量太大,并且有更高优先级的项目。
更详细的原始答案
Xenoterracide的回答已经有3.5年的历史了,从那时起,Git已经经历了几个版本(在撰写本文时,它已经从V1.6.5.5发展到V1.8.3.2),查看当前文档中的git remote update和git fetch,如果提供正确的选项和参数,它们似乎两者都可以执行从多个远程获取新提交的基本相同的功能。
获取多个远程设备的一种方法是使用--all标志:
git fetch --all
这将从您配置的所有远程设备中获取,假设您没有为它们设置remote.<name>.skipFetchAll:
remote.<name>.skipFetchAll
如果为true,则在使用__abc0或__abc1的update子命令进行更新时,将默认跳过此远程。git-config文档
这相当于使用
没有指定要获取的任何远程组,也没有在您的repo配置中设置remotes.default,并且您的远程没有将remote.<name>.skipDefaultUpdate设置为true.
remotes.default
remote.<name>.skipDefaultUpdate
Git配置的当前1.8.3.2文档没有提到remotes.default设置,但我咨询了万能的谷歌,并从米斯拉夫·马罗尼奇中找到了这个有用的解释:
$ git config remotes.default 'origin mislav staging' $ git remote update # fetches remotes "origin", "mislav", and "staging"
您可以定义要由__abc0命令获取的远程设备的默认列表。这些可以是来自您的队友、开源项目的受信任的社区成员或类似的远程用户。
因此,假设您设置了remotes.default,并且不是所有的远程设备都列在其中,那么git remote update不会获取您的repo “知道”的所有远程设备。
对于remote.<name>.skipDefaultUpdate的设置,Git文档是这样解释的:
如果为TRUE,则在使用git-fetch(1)或GIT-远程(1)的UPDATE子命令进行更新时,将默认跳过此远程。
fetch和remote update都允许您指定要获取的多个远程设备和远程设备组,而不是获取所有远程设备:
fetch
git fetch [<options>] <group> git fetch --multiple [<options>] [(<repository> | <group>)…]
git fetch [<options>] <group>允许您获取属于一个组的多个远程设备(借用米斯拉夫中的另一个示例):
git fetch [<options>] <group>
$ git config remotes.mygroup 'remote1 remote2 ...' $ git fetch mygroup
git fetch --multiple允许您一次指定多个存储库和存储库组进行提取(从医生们):
git fetch --multiple
允许指定多个<repository>和<group>参数。不能指定<refspec>s。
<repository>
<group>
<refspec>s
git remote update文档中的歧义
git remote update简介指定命令语法如下:
git remote [-v | --verbose] update [-p | --prune] [(<group> | <remote>)…]
注意最后一部分,[(<group> | <remote>)…]?ABC1__拖尾点意味着您可以使用该命令指定多个组和远程,这意味着它的行为方式与git fetch --multiple相同。看看两者之间的语法是如何相似的?
[(<group> | <remote>)…]
但是,在同一文档中,对__abc0命令的解释没有提到指定多个组和远程参数,只是说它
按照remotes.<group>的定义,获取存储库中一组命名的远程数据库的更新。
remotes.<group>
因此,在指定多个单独的远程和多个远程组时,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 fetch和git remote update所示的git porcelain命令之间的功能重复并不是唯一的。我注意到git rebase --onto和git cherry-pick也有类似的情况,两者都可以采取一定范围的提交来修补新的基本提交。
git rebase --onto
git cherry-pick
我猜想,随着Git这些年的发展,有些功能(不可避免地?)是重复的,有时可能是为了方便最终用户(例如,将一个范围传递给cherry-pick比反复传递单个提交来选择一个范围更简单)。显然,cherry-pick并不总是接受一定范围的提交,正如V1.7.2发行说明中所解释的那样:
cherry-pick
git cherry-pick学会了挑选提交的范围(例如,cherry-pick A..B和cherry-pick --stdin),git revert也是如此;然而,这些并不支持ABC4所具有的更好的顺序控制__。
cherry-pick A..B
cherry-pick --stdin
git revert