将代码推送到两个遥控器
这个问题在这里已经有了答案:
在最近的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.git
和git://original/repo.git
。
要用一个命令发送到两个远程,您可以为它创建一个别名:
git config alias.pushall '!git push origin devel && git push github devel'
有了这个,当你使用命令git pushall
,它将更新这两个存储库。