更改Git远程URL更新提取但不推送

时间:2017-01-26 15:12:05

标签: git ssh

我正在尝试在Git中更改我的原始分支的远程URL。我想要改变的只是SSH端口。首先,列出我的远程起源给了我:

git remote -v


origin  user@example.com:package/name.git (fetch)
origin  user@example.com:package/name.git (push)

然后,我运行set-url命令来更改我的原始网址:

git remote set-url origin ssh://user@example.com:XX/package/name.git    (XX is my port #)

现在,我可以毫无问题地获取,但推送我的分支到原点并不起作用,因为推送URL没有改变。再次列出我的遥控器我得到了这个:

git remote -v


origin  ssh://user@example.com:XX/package/name.git (fetch)
origin  user@example.com:package/name.git (push)

为什么我的set-url命令只更改了获取网址?

2 个答案:

答案 0 :(得分:28)

来自git-remote手册:

set-url
    Changes URL remote points to. Sets first URL remote points to matching regex <oldurl> (first URL if no <oldurl> is given) to <newurl>. If <oldurl> doesn’t match any URL,
    error occurs and nothing is changed.

    With --push, push URLs are manipulated instead of fetch URLs.

所以你应该另外执行:

git remote set-url --push origin ssh://user@example.com:XX/package/name.git

答案 1 :(得分:1)

只要所讨论的存储库的配置文件中包含推送URL的条目,set-url只会默认更新获取URL。

[remote "origin"]
    url = fetch.git
    fetch = ...
    pushurl = push.git

如running.t的答案所述,您可以使用set-url --push来更改此条目。但是,每次URL更改时,您都必须继续这样做。

要恢复set-url的默认行为(一次更改两个URL),只需从配置中删除该条目即可。或使用set-url --delete删除它:

git remote set-url --delete --push origin push.git

关于为什么不添加存储库就包含一个单独的推入URL的原因:像Sourcetree这样的git客户端会“有帮助地”做到这一点。