将代码推送到两个遥控器

这个问题在这里已经有了答案:

  • 从多个远程位置拉/推14个答案

  • 在最近的Git版本中,您可以为给定的远程添加多个pushurl 。 使用以下内容将两个pushurl添加到您的origin

    git remote set-url --add --push origin git://original/repo.git
    git remote set-url --add --push origin git://another/repo.git
    

    所以当你推动origin ,它会推到两个仓库。

    更新1:Git的1.8.0.1和1.8.1(可能还有其他版本)似乎有导致错误--add代替原来的URL你使用它的第一次,所以你需要使用重新添加原始URL相同的命令。 做git remote -v应该会显示每个远程的当前URL。

    更新2: Git维护者Junio C. Hamano解释了它是如何设计的。 做git remote set-url --add --push <remote_name> <url>为给定的远程添加一个pushurl ,它将覆盖默认的推送URL。 但是,您可以为给定的遥控器添加多个pushurl ,然后允许您使用单个git push推送到多个遥控器。 您可以在下面验证此行为:

    $ git clone git://original/repo.git
    $ git remote -v
    origin  git://original/repo.git (fetch)
    origin  git://original/repo.git (push)
    $ git config -l | grep '^remote.'
    remote.origin.url=git://original/repo.git
    remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
    

    现在,如果您想使用单个命令推送到两个或更多存储库,您可以创建一个名为all的新远程(如@Adam Nelson在注释中所建议的),或者继续使用origin ,尽管后一个名称不太容易描述这个目的。 如果您仍想使用origin ,请跳过以下步骤,并在所有其他步骤中使用origin而不是all origin

    因此,让我们添加一个新的远程呼吁all推来推去多个库时,我们将在后面参考:

    $ git remote add all git://original/repo.git
    $ git remote -v
    all git://original/repo.git (fetch)               <-- ADDED
    all git://original/repo.git (push)                <-- ADDED
    origin  git://original/repo.git (fetch)
    origin  git://original/repo.git (push)
    $ git config -l | grep '^remote.all'
    remote.all.url=git://original/repo.git            <-- ADDED
    remote.all.fetch=+refs/heads/*:refs/remotes/all/* <-- ADDED
    

    然后,让我们将pushurl添加到all远程,指向另一个存储库:

    $ git remote set-url --add --push all git://another/repo.git
    $ git remote -v
    all git://original/repo.git (fetch)
    all git://another/repo.git (push)                 <-- CHANGED
    origin  git://original/repo.git (fetch)
    origin  git://original/repo.git (push)
    $ git config -l | grep '^remote.all'
    remote.all.url=git://original/repo.git
    remote.all.fetch=+refs/heads/*:refs/remotes/all/*
    remote.all.pushurl=git://another/repo.git         <-- ADDED
    

    这里git remote -v显示push的新pushurl ,所以如果你做git push all master ,它会将master分支推到git://another/repo.git 。 这显示了pushurl如何覆盖默认的url(remote.all.url)。

    现在让我们添加另一个指向原始存储库的pushurl

    $ git remote set-url --add --push all git://original/repo.git
    $ git remote -v
    all git://original/repo.git (fetch)
    all git://another/repo.git (push)
    all git://original/repo.git (push)                <-- ADDED
    origin  git://original/repo.git (fetch)
    origin  git://original/repo.git (push)
    $ git config -l | grep '^remote.all'
    remote.all.url=git://original/repo.git
    remote.all.fetch=+refs/heads/*:refs/remotes/all/*
    remote.all.pushurl=git://another/repo.git
    remote.all.pushurl=git://original/repo.git        <-- ADDED
    

    你看到我们添加的两个pushurl都被保留。 现在,单个git push all master会将master分支推送到git://another/repo.gitgit://original/repo.git


    要用一个命令发送到两个远程,您可以为它创建一个别名:

    git config alias.pushall '!git push origin devel && git push github devel'
    

    有了这个,当你使用命令git pushall ,它将更新这两个存储库。

    链接地址: http://www.djcxy.com/p/8765.html

    上一篇: Pushing code to two remotes

    下一篇: pull/push from multiple remote locations