git pull和git push的默认远程(跟踪分支)不同

时间:2010-05-26 21:12:02

标签: git branch

有没有办法设置git存储库,以便git pull默认为一个远程,git push默认为另一个?我知道我可以通过更改remote分支部分中.git/config变量的值来设置两个,但是如何分别为每个方向执行此操作?

6 个答案:

答案 0 :(得分:82)

自Git 1.7.0版起,您可以使用以下命令设置:

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

答案 1 :(得分:26)

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

可以使用它来使用只读https:协议并使用基于ssh的协议进行推送。


origin的网址(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

答案 2 :(得分:20)

从Git 1.8.3开始,您可以使用pull选项完全按照您的意愿行事(即为pushpushTarget设置不同的默认遥控器)。你可以像任何其他选项一样设置选项;例如,要将其设置为git config remote.pushDefault pushTarget 遥控器,请使用

git pull

此选项具有以下效果:

  • remote将从.git/config中相关分支部分中的git push选项指定的遥控器中提取,而
  • remote.pushDefault将推送到remote.<name>.pushurl指定的遥控器。

请注意,您需要指定远程的名称,而不是URL。这使得此解决方案比涉及function loop_n_letter($string) { $output = ''; if (! is_string($string)) $string = (string) $string; for ($i = 0; $i < strlen($string); $i += 2) { $output .= $string[$i]; } return $output; } loop_n_letter('12121212'); 的解决方案更灵活,因为(例如)您仍将拥有两个遥控器的跟踪分支。您是否需要或希望获得这种灵活性取决于您。

The release notes表示此选项专门用于支持三角工作流程。

答案 3 :(得分:4)

从我可以从git config man page收集到的,上游回购是:

  • 默认来源
  • branch.remote
  • 设置
  • 始终同时适用于git pull/fetchgit pull

对于给定的分支,我认为没有任何方法可以默认使用两个单独的远程

答案 4 :(得分:2)

user392887's answer大部分都是正确的,但是:

  1. 您应该更喜欢使用SSH。根据GitHub,&#34;我们强烈建议在与GitHub交互时使用SSH连接。 SSH密钥是一种识别可信计算机的方法,不涉及密码。&#34;

  2. 任何使用RHEL / CentOS 6的人默认使用git 1.7.1,它支持set-url

  3. 所以,git 1.7.1的首选解决方案。后来是:

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

答案 5 :(得分:0)

如果您也来这里寻找每个分支的解决方案,请参阅手册:

<块引用>

branch.<name>.pushRemote

当在 branch 上时,它会覆盖 branch..remote 进行推送。它还覆盖 remote.pushDefault 以从 branch 推送。当您从一个地方(例如您的上游)拉取并推送到另一个地方(例如您自己的发布存储库)时,您可能希望设置 remote.pushDefault 以指定要推送到所有分支的远程,并使用此选项覆盖它用于特定分支。