我有两个远程git存储库.origin
和github
我将我的分支推devel
送到两个存储库.
git push -u origin devel
git push -u github devel
Run Code Online (Sandbox Code Playgroud)
但是,当我这样做的时候.git push
它只会被推到github
.
无论如何我可以设置我的两个遥控器,以便我可以用一个命令将更改推送到两个存储库?
jwe*_*ich 679
在最新版本的Git中,您可以pushurl
为给定的遥控器添加多个s.使用以下内容将2添加pushurl
到您的origin
:
git remote set-url --add --push origin git://original/repo.git
git remote set-url --add --push origin git://another/repo.git
Run Code Online (Sandbox Code Playgroud)
因此,当您推送时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>
添加a pushurl
,它会覆盖推送的默认URL.但是,您可以pushurl
为给定的遥控器添加多个s,然后允许您使用单个遥控器推送到多个遥控器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/*
Run Code Online (Sandbox Code Playgroud)
现在,如果您想使用单个命令推送到两个或更多存储库,您可以创建一个名为的新远程all
(如评论中的@Adam Nelson所建议),或者继续使用origin
,但后者的名称对此目的的描述较少.如果您仍想使用origin
,请跳过以下步骤,而origin
不是all
在所有其他步骤中使用.
所以让我们添加一个新的远程调用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
Run Code Online (Sandbox Code Playgroud)
然后让我们添加一个指向另一个存储库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
Run Code Online (Sandbox Code Playgroud)
这里git remote -v
显示了pushurl
push 的新内容,所以如果你这样做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
Run Code Online (Sandbox Code Playgroud)
你看到pushurl
我们添加的两个都被保留了.现在一个人git push all master
将把master
分支推到两个git://another/repo.git
和git://original/repo.git
.
Wil*_*uta 86
要使用一个命令发送到两个远程,您可以为它创建别名:
git config alias.pushall '!git push origin devel && git push github devel'
Run Code Online (Sandbox Code Playgroud)
这样,当您使用该命令时git pushall
,它将更新两个存储库.
归档时间: |
|
查看次数: |
150778 次 |
最近记录: |