不同的默认远程(跟踪分支)为git拉和git推

有没有办法build立一个git仓库,所以git pull拉默认为一个远程和git push默认到另一个? 我知道我可以通过更改.git/config分支部分中的remotevariables的值来设置,但是如何分别对每个方向进行设置?

对于Git 1.6.4及更高版本,使用git config设置remote.<name>.pushurl

有人可能会使用这种方式来使用只读的https:协议,并使用基于ssh的协议进行推送。


origin的url( remote.origin.url )是https://git.example.com/some/repo.git 。 它是只读的,但您可以通过基于ssh的“URL” git@git.example.com:some/repo.git进行写入访问。 运行以下命令来推送基于ssh的协议:

 git config remote.origin.pushurl git@git.example.com:some/repo.git 

由于Git 1.7.0版本,你可以设置:

 git remote set-url --push origin https://your.push.com/blah/ 

从Git 1.8.3开始,你可以使用remote.pushDefault选项来完成你想要的function(比如,对于pullpush有不同的默认遥控器)。 您可以像其他任何设置一样来设置选项; 例如,将其设置为pushTarget远程,使用

 git config remote.pushDefault pushTarget 

该选项将具有以下效果:

  • git pull将从.git/config中的相关分支部分中的remote选项指定的remote拉出
  • git push会推送到remote.pushDefault指定的远程。

请注意,您需要指定远程的名称 ,而不是URL。 这使得这个解决scheme比涉及remote.<name>.pushurl的解决scheme更加灵活,因为(例如)你仍然会为两个遥控器都有追踪分支。 无论您是需要还是希望这种灵活性都取决于您。

发行说明说这个选项是专门为了支持三angular形工作stream而添加的。

从我可以从gitconfiguration手册页收集,上游回购是:

  • 默认来源
  • branch.remote设置
  • 总是为git pull/fetchgit pull

对于一个给定的分支,我没有看到任何方式默认有两个单独的远程。

这在1.7.1及以上的作品 –

 git remote set-url --push origin git@github.com:username/somerepo.git