`git fetch origin` 和 `git fetch git://127.0.0.1/` 有什么区别

What's the difference between `git fetch origin` and `git fetch git://127.0.0.1/`

我正在试验 git 并在 ~/A 中创建了一个仅包含主分支的存储库。

然后我将此存储库克隆到 ~/B(通过在 ~/A 和 运行 git clone git://127.0.0.1/ 中启动 git daemon)。

然后我在 ~/A 中创建了一个新的 test 分支,并试图在 ~/B 中获取该分支。然而,git fetch git://127.0.0.1/只显示

From git://127.0.0.1
 * branch            HEAD       -> FETCH_HEAD

为了获得新分支,我最终做了 git fetch,据我所知,这相当于 git fetch origin。无论如何,这两个都给了我

From git://127.0.0.1
 * [new branch]      test       -> origin/test

之后,我可以通过 git checkout test 开始处理 ~/B 中的 test 分支。

git remote -v显示

时,git fetch git://127.0.0.1/git fetch origin怎么可能有不同的结果
origin  git://127.0.0.1/ (fetch)
origin  git://127.0.0.1/ (push)

守护进程显示对所有命令的相同请求,即

[20291] Extended attribute "host": 127.0.0.1
[20291] Request upload-pack for '/'

当你 运行 git fetch origin 要求 git 查找远程命名源的配置时,从配置的 URL 中获取并写入任何 fetchspec 映射将遥控器的信息存储在远程跟踪分支中(例如,将您的 refs/remotes/origin/master 映射到遥控器的 refs/heads/master)。

当您 运行 git fetch <url> 时,您绕过了远程配置。 git 不会尝试将 url 匹配到远程并使用远程配置。 (实际上,这会产生歧义,您可以拥有多个具有相同 URL 的遥控器,这可能对配置不同的获取规范很有用)。

相反,git fetch <url> 将直接从指定的 url 中获取,并将远程的 HEAD 放入您的 FETCH_HEAD 文件中。由于没有远程,它不会更新远程跟踪分支。您可以检查 FETCH_HEAD 以查看您已获取的内容,但是使用遥控器而不是 url 更容易获取。