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

smi*_*omb 20 git ssh

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

git remote -v


origin  user@example.com:package/name.git (fetch)
origin  user@example.com:package/name.git (push)
Run Code Online (Sandbox Code Playgroud)

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

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

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

git remote -v


origin  ssh://user@example.com:XX/package/name.git (fetch)
origin  user@example.com:package/name.git (push)
Run Code Online (Sandbox Code Playgroud)

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

run*_*g.t 35

来自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.
Run Code Online (Sandbox Code Playgroud)

所以你应该另外执行:

git remote set-url --push origin ssh://user@example.com:XX/package/name.git
Run Code Online (Sandbox Code Playgroud)

  • @JackJames:对,我很确定这个命令默认只设置了获取url.现在我试图在文档中找到确切的描述,但我只发现了几个不一致的博客帖子,例如[this one](http://blog.yuriy.tymch.uk/2012/05/different-git-push-pullfetch-urls. html)ant [this one](http://sushihangover.github.io/git-set-up-a-fetch-only-remote/)告诉我们如果没有设置push,则fetch用作后备.我可能会查看[源代码](https://github.com/git/git)来查找. (3认同)
  • 这确实有效,尽管它没有解释为什么它没有按预期更新两者 (2认同)
  • @BenyaminJafari:好吧,在 [git-pull 文档](https://git-scm.com/docs/git-pull#_description) 中,您可以发现 `pull` 实际上是 `fetch` 后跟 `merge` . 所以是的,获取远程地址是您调用 `git pull` 时使用的地址。 (2认同)

maf*_*afu 6

只要有问题的 repo 的配置文件包含推送 URL 的条目set-url,默认情况下只会更新获取 URL。

[remote "origin"]
    url = fetch.git
    fetch = ...
    pushurl = push.git
Run Code Online (Sandbox Code Playgroud)

正如 running.t 的答案所解释的,您可以使用set-url --push更改此条目。但是,每次 URL 更改时,您都必须继续执行此操作。

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

git remote set-url --delete --push origin push.git
Run Code Online (Sandbox Code Playgroud)

至于为什么存储库会在没有您添加的情况下包含单独的推送 url:像 Sourcetree 这样的一些 git 客户端“有帮助”地做到了这一点。