git: 将远程设置为本地存储库本身

git: setting a remote to the local repository itself

让我们创建一个新的 git 存储库:

$ git init test
$ cd test

然后添加一个遥控器,指向我们自己

$ git remote add origin .

注意点,指的是测试目录。

这似乎按预期运行。您可以进行提交、设置分支跟踪以及自行推送和拉取。我 运行 唯一奇怪的是,如果你提交,然后获取,如果你去推送,你未推送的更改已经存在(为什么会发生这种情况是有道理的,但它可能是意外的)。

此功能稳定/预期吗?像这样使用遥控器会有什么后果?任何 git 命令用法都会在这样的存储库上出错吗?有实际用例吗?

我认为这可能有助于获得减去复制的 git 功能(而不是推送到同一台计算机上的裸存储库)

这似乎是一个奇怪的功能,令我惊讶的是我在任何地方都没有发现任何关于它的讨论。

这不是一个特定的功能。它只是自然而然地脱离了这样一个事实,即远程是 URL 的简称,我们将在其中找到其他一些 Git 存储库。通常 . 不会是 URL——例如你必须拼出 file:///path/to/git/repo——但是 Git 接受某些扩展的 URL,包括任何是一个有效的路径名。1

不过,这确实让他们头疼了两件事:

  • 通常 origin。在这里,origin 现在是 . 的“短”,即 更短

  • 通常,另一个Git 存储库是另一个 Git 存储库。在这里,它是您自己的 Git 存储库。这就是让某些事情感觉有点奇怪的原因。

尽管没有特别的理由为“其他”Git 存储库使用 name:只需使用 git fetch . <em>refspec</em>git 推送。 <em>refspec</em>。这让你没有为这两个操作设置上游的便利,但你可以将一个(本地)分支的上游设置为另一个(本地)分支,这将获得大部分便利。


1 一样,在此处使用路径名会改变一些可见的行为:特别是 Git 将在克隆时创建硬链接到local-file-system 对象,如果可能的话。使用 file:// URLs 禁用此功能(--no-local 也是如此)。因此,虽然路径占据语法位置 for a URL,但它并不是真正的 URL.