获取和推送的远程URL是否会有所不同?

Boo*_*oon 28 git git-remote

git remote --v显示远程信息

origin  https://github.com/test/testing-iOS.git (fetch)
origin  https://github.com/test/testing-iOS.git (push)
Run Code Online (Sandbox Code Playgroud)

它表明fetch和push都使用相同的远程URL.

题:

什么时候(如果有的话)fetch和push的远程URL会有所不同?

您可以使用哪些命令来更改远程URL以便单独获取或推送?

Von*_*onC 22

是(使用不同的遥控器),这就是为什么Git 2.5引入了新的ref速记@{push}.
请参阅" 查看未推送的Git提交 "

您可以使用哪些命令来更改远程URL以便单独获取或推送?

你需要一个单独的遥控器:

git remote add myfork /url/for/my/fork
git config remote.pushdefault myfork
Run Code Online (Sandbox Code Playgroud)

GitHub博客文章" 改进了对三角工作流程的支持 "说明了以下内容的使用@{push}:

https://cloud.githubusercontent.com/assets/1319791/8943755/5dcdcae4-354a-11e5-9f82-915914fad4f7.png

查看自上次推送以来您添加到当前分支的提交:

git clone https://github.com/YOUR-USERNAME/atom
cd atom
git config remote.pushdefault origin
git config push.default current
Run Code Online (Sandbox Code Playgroud)
  • remote.pushdefault指定其中推(向哪个远程回购).
  • push.default指定什么推(什么的Refspec),当明确给出任何的Refspec.
    current在后一种情况下,意味着"推送当前分支以更新接收端具有相同名称的分支".

以下分支将从一个URL获取,推送到另一个URL:

git remote add upstream https://github.com/atom/atom
git fetch upstream
git checkout -b whizbang upstream/master
Run Code Online (Sandbox Code Playgroud)

(这里的whizbang分支跟踪upstream/master,但推动origin/whizbang)

git log @{push}..
Run Code Online (Sandbox Code Playgroud)

这使用新的@{push}表示法,表示当前分支将被git push推送到的远程跟踪分支的当前值,即origin/whizbang.
您还可以使用表示法引用任意分支的推送目标whizbang@{push}.


小智 10

从文档中,Fetch和Push URL应该相同.

http://git-scm.com/docs/git-remote

用于设置Push和fetch urls的命令

'git remote set-url' [--push] <name> <newurl> [<oldurl>]
Run Code Online (Sandbox Code Playgroud)

请注意,推送URL和提取URL即使可以设置不同,仍必须引用相同的位置.您推送到推送URL的内容应该是您从提取URL中立即获取的内容.如果您尝试从一个地方(例如您的上游)获取并推送到另一个地方(例如您的发布存储库),请使用两个单独的遥控器.

  • URL 不需要相同;他们只是“必须仍然指同一个地方”。有时,使用“git@”和 url“https://”作为 Pushurl 会有所帮助,原因由 Piotr Henryk Dabrowski 在另一个答案中解释。 (2认同)