小编典典

git remote update 和 fetch 的区别?

all

git remote update相当于git fetch? _


阅读 158

收藏
2022-07-13

共1个答案

小编典典

更新:更多信息!

我应该从一开始就这样做:我在 Git 的 Git 存储库中抓取了 Git 发行说明(太元了!)

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

然后我进行了less搜索--all,这是我在Git 版本 1.6.6
的发行说明
下找到的:

git fetch学习--all--multiple选项,从许多存储库运行
fetch,以及--prune删除过时的远程跟踪分支的选项。这些使git remote update并且git remote prune不太必要(尽管没有计划删除remote updatenor remote prune)。

1.6.6 版直到2009 年 12 月 23
才发布,原始发帖人在 2009 年 12 月 6 日问了他的问题。

因此,正如您从发行说明中看到的那样,Git 的作者意识到git remote update命令功能git fetch
.这只是太多的工作,还有更高优先级的项目。


更多细节的原始答案

xenoterracide 的答案现在已经有 3.5 年历史了,从那时起 Git
已经经历了几个版本(在撰写本文时它已经从v1.6.5.5到 v1.8.3.2),并查看 当前 文档git remote updategit fetch,它看起来就像他们 都可以执行基本相同的功能,从多个遥控器获取新的提交 ,给定正确的选项和参数。

获取所有遥控器

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

git fetch --all

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

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

这相当于使用

git remote update

没有指定要获取的任何远程组,也没有remotes.default在您的 repo
配置中进行设置,并且您的所有遥控器都没有remote.<name>.skipDefaultUpdate设置为 true。

Git 配置的当前 1.8.3.2
文档
没有提及remotes.default设置,但我咨询了全能谷歌并从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不会获取您的存储库“知道”的所有遥控器。

至于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>
2022-07-13