Git – 推送代码到两个遥控器
我有两个远程git仓库。  origin和github 
 我把我的分支devel到这两个存储库。 
 git push -u origin devel git push -u github devel 
 但是,当我这样做。  git push它只会被推到github 。 
无论如何,我可以设置我的两个遥控器,以便我可以用一个命令来推动对这两个存储库的更改?
 在最近的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(可能还有其他版本)似乎有一个错误,会导致 – 第一次使用时会添加原始URL,因此您需要重新添加原始URL相同的命令。  做 git remote -v应该显示每个远程的当前URL。
  更新2: Git的维护者Junio C. Hamano解释了它是如何devise的。 做git remote set-url --add --push <remote_name> <url>添加一个给定的远程pushurl ,这将覆盖推送的默认URL。 但是,您可以为给定的遥控器添加多个pushurl ,然后允许您使用一个git push推送到多个遥控器。 您可以在下面validation此行为: 
 $ 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/* 
 现在,如果要使用单个命令推送到两个或更多存储库,则可以创build一个名为all的新远程(如@Adam Nelson在注释中所build议的),或者继续使用origin ,尽pipe后者的名称对于这个目的。 如果您仍想使用origin ,请跳过以下步骤,并在所有其他步骤中使用origin而不是all origin 。 
因此,我们添加一个新的远程程序,以便在推送到多个存储库时稍后参考:
 $ 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 。 
要用一个命令发送给两个远程,你可以为它创build一个别名:
 git config alias.pushall '!git push origin devel && git push github devel' 
 有了这个,当你使用命令git pushall ,它将更新这两个存储库。