我正在尝试在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
命令只更改了获取网址?
答案 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客户端会“有帮助地”做到这一点。