做空者:有没有一种方法可以让git回购推送到远程回购列表(而不是一个单一的“来源”)中并从中提取?

长篇大论:当我在多台电脑上开发一个应用程序时,我经常会遇到这样的情况,这些电脑具有不同的连接能力——比如,一台笔记本电脑在运输途中,一台电脑“a”在某个位置,另一台电脑则“B”在另一台位置。此外,笔记本电脑可能只与“A”或“B”连接,有时两者都连接。

我希望git始终“拉”到它当前可以连接的所有计算机,这样从一台机器跳到另一台机器,继续无缝工作就更容易了。


当前回答

使用以下命令向全局gitconfig(/home/user/.gitconfig)添加别名。

git config --global alias.pushall '!f(){ for var in $(git remote show); do echo "pushing to $var"; git push $var; done; }; f'

一旦你提交代码,我们说

数字推送

默认情况下推送到原点。在上面的别名之后,我们可以说

git推球

并且代码将被更新到所有远程设备,包括原始远程设备。

其他回答

添加all remote有点乏味,因为您必须在使用的每台机器上进行设置。

此外,提供的bash和git别名都假定您将推送到所有远程。(例如:我在GitHub和GitLab上维护了一个sshag分支。我添加了上游远程,但我没有权限推送它。)

这里有一个git别名,它只通过包含@的推送URL推送到远程设备。

psall    = "!f() { \
    for R in $(git remote -v | awk '/@.*push/ { print $1 }'); do \
    git push $R $1; \
    done \
    }; f"

使用以下命令向全局gitconfig(/home/user/.gitconfig)添加别名。

git config --global alias.pushall '!f(){ for var in $(git remote show); do echo "pushing to $var"; git push $var; done; }; f'

一旦你提交代码,我们说

数字推送

默认情况下推送到原点。在上面的别名之后,我们可以说

git推球

并且代码将被更新到所有远程设备,包括原始远程设备。

你需要一个脚本来循环它们。Git不提供“推送全部”。理论上可以在多个线程中进行推送,但本地方法不可用。

提取甚至更复杂,我建议线性地进行。

我认为你最好的答案是有一台机器,如果有可能的话,每个人都可以推/拉它。

您可以使用gitremote命令配置多个远程存储库:

git remote add alt alt-machine:/path/to/repo

要从所有配置的远程获取并更新跟踪分支,但不合并到HEAD,请执行以下操作:

git remote update

如果它当前未连接到其中一个遥控器,则会花费时间或抛出错误,然后继续下一个。您将不得不从提取的存储库中手动合并,或者根据您想要组织收集更改的方式来选择。

要从alt获取主分支并将其拉入当前的头部,请执行以下操作:

git pull alt master

所以事实上,git pull几乎是git pull-origin HEAD的简写(实际上,它在配置文件中查找以确定这一点,但您可以理解)。

对于推送更新,您必须手动对每个回购进行推送。我认为,推送是在考虑中央存储库工作流的情况下设计的。

下面是我在.gitconfig别名部分中使用bash脚本的示例

[alias]
        pushall = "!f(){ for i in `git remote`; do git push $i; done; };f"