有没有办法设置git存储库,以便git pull
默认为一个远程,git push
默认为另一个?我知道我可以通过更改remote
分支部分中.git/config
变量的值来设置两个,但是如何分别为每个方向执行此操作?
答案 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
选项完全按照您的意愿行事(即为push
和pushTarget
设置不同的默认遥控器)。你可以像任何其他选项一样设置选项;例如,要将其设置为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/fetch
和git pull
对于给定的分支,我认为没有任何方法可以默认使用两个单独的远程 。
答案 4 :(得分:2)
user392887's answer大部分都是正确的,但是:
您应该更喜欢使用SSH。根据GitHub,&#34;我们强烈建议在与GitHub交互时使用SSH连接。 SSH密钥是一种识别可信计算机的方法,不涉及密码。&#34;
任何使用RHEL / CentOS 6的人默认使用git 1.7.1,它支持set-url
。
所以,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 以指定要推送到所有分支的远程,并使用此选项覆盖它用于特定分支。