如何定义 git 'remote.<group>' 用于抓取?

How do I define a git 'remote.<group>' for fetching?

我和其他人一起参与了几个项目,这些项目是根据客户的要求而发展的。通常情况下,我完全沉浸在当前的工作中,没有得到关于其他项目的最新进展。所以我每天早上做一次 "complete fetch" 这样我就不会完全迷路。我已经为我制定了一个 shell 脚本,所以它会更改到每个项目的目录,显示它的位置,并获取(不拉)和 returns 我到我所在的任何地方(注意,都是一行,只是拆开来帮助阅读):

$ pushd . && cd /W/Git/project1 && pwd && git fetch 
&& cd /W/Git/project2 && pwd && git fetch 
&& cd /W/Git/project3 && pwd && git fetch && popd

我只是 read a bit 关于远程。将更新为 git fetch:

git fetch can fetch from either a single named repository or URL, or from several repositories at once if is given and there is a remotes. entry in the configuration file.

所以我认为 git fetch remote.<group> 非常适合我这个庞大的命令行的目的,简化维护和记忆。但是我找不到如何定义这样的直接参考 remote.<group>. 谁能给我一个命令行示例?

I think git fetch remote. would very well fit the purpose of my monstrous command line

我不这么认为。无论如何,您无法通过一次提取更新 3 个不同的项目,因此没有组会帮助您。

一个 git fetch 命令正在处理 一个 git 项目。文档说 git fetch 允许获取多个遥控器,但它只适用于一个项目。默认情况下,如果同步获取遥控器(从 git 2.24 开始,它可以在 parallel 中完成),但它仍然适用于一个 git 项目。

如果您想从多个项目中并行获取它们,您确实需要 运行 单独的 git fetch 命令。我建议不要将 cd 放入 git 项目,而只需调用带有 -C 参数的 git 命令,然后您可以从任何工作目录调用此命令。

因此,您所讨论的示例可能如下所示:

$ git -C /W/Git/project1 fetch && git -C /W/Git/project2 fetch && git -C /W/Git/project3 fetch 

您可以使它并行,但如何做取决于您使用的shell。我在 bash 方面不是很好,但这是我尝试使用 bash 的 & 在后台执行命令和 wait 内置等待所有命令完成:

git -C /W/Git/project1 fetch -v & git -C /W/Git/project2 fetch -v & git -C /W/Git/project3 fetch -v & wait

此处三个 git fetch -v 命令在后台执行,您等待所有命令完成。我添加了 -v 详细参数以更好地查看执行的内容。

你也可以尝试循环执行:

for project in /W/Git/project1 /W/Git/project2 /W/Git/project3 ; do echo "fetching for $project"; git -C $project fetch & done ; wait

奖励:如何定义 git 'remote.' 用于抓取?

这回答了你标题中的问题。您现在知道这不是您要查找的内容,因为定义 remote.<group> 仅适用于一个 git 项目。但我实际上发现了您的问题,因为我正在搜索如何定义此 remote.<group> 配置但一无所获。所以也许有人会发现它有用。

要定义命名远程组,请编辑您的 git 配置(打开 .git/config 或执行 git config --edit)并添加如下内容:

[remotes]
    group1 = remote1 remote2 origin
    group2 = remote55 remote66

组中的遥控器由空格分隔。现在您可以使用此组名称,例如 git fetch group1,甚至可以从多个组中并行获取遥控器,例如 git fetch --multiple -j4 group1 group2.