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

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

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


当前回答

我将两个单独的pushurl添加到.git配置文件中的远程“源”。当我运行git push origin“branchName”时,它将运行并推送到每个url。不确定是否有更简单的方法来实现这一点,但这对我自己来说是可行的,既可以推送Github源代码,也可以推送My.visualStudio源代码。

[remote "origin"]
  url = "Main Repo URL"
  fetch = +refs/heads/*:refs/remotes/origin/*
  pushurl = "repo1 URL"
  pushurl = "reop2 URl"

其他回答

2023年更新

如果您想同时推送多个遥控器,您可能已经足够了解git。我们在git中称远程存储库为remotes。将更改推到远程将是通常开发周期的一部分。

有时,您可能需要将更改推送到多个远程设备,如GitHub、bitbucket等。要做到这一点,您可以按照给定的说明进行操作。

列出您现有的遥控器

您可以使用以下命令列出所有可用的远程设备。

git remote -v

假设您尚未配置任何(其他)远程。您可以使用git remote来完成此操作。

git remote add  remote_name  remote_url

例子:

git remote add github https//github.com/path/to/repo

通常,我们通过默认原点寻址远程名称来推送更改,类似于git推送原点。您可以配置多个远程组并为其命名。所以你通过引用这个名字来推送所有这些遥控器。

通过使用gitremote或gitconfig命令或编辑配置文件,可以添加多个远程。

由于git可以对多个远程进行分组,您可以按照以下任何方式配置多个远程以同时推送(不需要全部)。

使用gitremote添加远程

您可以使用gitremote将多个远程URL设置为单个远程。

如果您还没有名为“all”的远程,请使用gitremoteadd创建它,然后使用gitremoteseturl-add向现有远程添加新的url。

git remote add all <remote URL>

Then

git remote set-url  --add  all  <another remote URL>

您可以使用gitremote-v交叉检查添加的新远程。

(OR)

使用git-config对多个远程进行分组

gitconfig命令用于配置git参数。它将根据给定的输入编辑.git/config文件。

git config --add remote.all.url  https//domain.com/repo.git
git config --add remote.all.url  ssh://user@host/repos/repo.git

注意,没有--add选项命令将替换现有的远程URL。您可以在.git/config中验证更新的配置。

(OR)

如果您知道配置格式,请编辑文件.git/config以添加远程和多个远程URL。

现在,通过引用分配了多个远程URL的远程名称,您可以同时推送多个远程。

git push all master

您可以始终推送到多个远程存储库,而无需使用正式的bash语法对它们进行分组。

git push server master && git push github 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"

我将两个单独的pushurl添加到.git配置文件中的远程“源”。当我运行git push origin“branchName”时,它将运行并推送到每个url。不确定是否有更简单的方法来实现这一点,但这对我自己来说是可行的,既可以推送Github源代码,也可以推送My.visualStudio源代码。

[remote "origin"]
  url = "Main Repo URL"
  fetch = +refs/heads/*:refs/remotes/origin/*
  pushurl = "repo1 URL"
  pushurl = "reop2 URl"

我在~/.bashrc中添加了这些别名:

alias pushall='for i in `git remote`; do git push $i; done;'
alias pullall='for i in `git remote`; do git pull $i; done;'

从第一个URL克隆:

git clone git@github.com:myuser/myrepo.git

查看当前远程:

$ git remote -v
origin  git@github.com:myuser/myrepo.git (fetch)
origin  git@github.com:myuser/myrepo.git (push)

为原点添加第二个遥控器:

git remote set-url --add origin git@bitbucket.org:myuser/myrepo.git

确认已列出两个遥控器以进行推送:

$ git remote -v
origin  git@github.com:myuser/myrepo.git (fetch)
origin  git@github.com:myuser/myrepo.git (push)
origin  git@bitbucket.org:myuser/myrepo.git (push)

$ git config --local --get-regexp ^remote\..+\.url$
remote.origin.url git@github.com:myuser/myrepo.git
remote.origin.url git@bitbucket.org:myuser/myrepo.git

按顺序推送到所有URL:

git push

要删除远程:

git remote set-url --delete origin git@bitbucket.org:myuser/myrepo.git