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

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

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


当前回答

添加新远程

git remote add upstream https://github.com/example-org/example-repo.git

git remote -vv

从多个位置提取

git fetch --all

推送至位置

git push -u upstream/dev

其他回答

使用现代版本的git,不再需要手动执行此操作!见下文Malvineous的解决方案。

此处转载:

git remote set-url origin --push --add <a remote>
git remote set-url origin --push --add <another remote>

原答覆:

这是我用了很长时间没有坏后果的东西,是Linus Torvalds在git邮件列表中建议的。

araqnid的解决方案是将代码引入存储库的合适解决方案……但如果你和我一样拥有多个同等的权威上游(我将一些更关键的项目克隆到私有上游、GitHub和Codaset),那么每天都要对每个项目进行更改可能会很痛苦。

长话短说,gitremote单独添加所有远程……然后git-config-e并添加一个合并的远程。假设您有此存储库配置:

[remote "GitHub"]
    url = git@github.com:elliottcable/Paws.o.git
    fetch = +refs/heads/*:refs/remotes/GitHub/*
[branch "Master"]
    remote = GitHub
    merge = refs/heads/Master
[remote "Codaset"]
    url = git@codaset.com:elliottcable/paws-o.git
    fetch = +refs/heads/*:refs/remotes/Codaset/*
[remote "Paws"]
    url = git@github.com:Paws/Paws.o.git
    fetch = +refs/heads/*:refs/remotes/Paws/*

…要为“Paws”和“Codaset”创建一个合并的远程,我可以在所有这些之后添加以下内容:

[remote "Origin"]
    url = git@github.com:Paws/Paws.o.git
    url = git@codaset.com:elliottcable/paws-o.git

一旦我做到了这一点,当我按下Origin Master时,它将按顺序推送到Paws/Master和Codaset/Master,这让生活变得简单了一点。

添加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"

为了更新遥控器(即拉杆箱),事情变得更容易了。

莱纳斯的声明

可悲的是,根本没有办法用一个数字来伪装别名

elliottcable的答案不再为真。

gitfetch在过去的某个地方学习了--all参数,允许一次性获取所有遥控器。

如果没有全部请求,可以使用--multiple开关来指定多个远程或一个组。

自git1.8(2012年10月)以来,您可以通过命令行执行此操作:

git remote set-url origin --push --add user1@repo1
git remote set-url origin --push --add user2@repo2
git remote -v

然后git push将推到user1@repo1,然后推到user2@repo2.

我想在VSO/TFS中工作,然后在准备好后向GitHub公开推送。在私人VSO中创建的初始回购。当需要添加到GitHub时,我做到了:

git remote add mygithubrepo https://github.com/jhealy/kinect2.git
git push -f mygithubrepo master

像冠军一样工作。。。

要进行健全性检查,请发出“gitremote-v”以列出与项目关联的存储库。

C:\dev\kinect\vso-repo-k2work\FaceNSkinWPF>git remote -v
githubrepo      https://github.com/jhealy/kinect2.git (fetch)
githubrepo      https://github.com/jhealy/kinect2.git (push)
origin  https://devfish.visualstudio.com/DefaultCollection/_git/Kinect2Work (fetch)
origin  https://devfish.visualstudio.com/DefaultCollection/_git/Kinect2Work (push)

简单的方法,对我有用…希望这能帮助到某人。