1

我目前正在阅读Jon Loeliger的《使用 Git 进行版本控制》一书。

它谈到了硬链接和 2 之间的细微差别file://

如您所见,Git URL 的最简单形式是指本地文件系统上的存储库,无论是真正的物理文件系统还是通过网络文件系统 (NFS) 安装在本地的虚拟文件系统。有两种排列方式:

/path/to/repo.git

file:///path/to/repo.git

尽管这两种格式本质上是相同的,但两者之间存在细微但重要的区别。前者使用文件系统中的硬链接在当前和远程存储库之间直接共享完全相同的对象;后者复制对象而不是直接共享它们。为避免与共享存储库相关的问题,file://建议使用该表单。

起初,我确实认为我克隆的 repo./git/object文件夹是远程的链接.git/object,但我想不是。

有人可以解释一下吗?

4

1 回答 1

1

git clone在这两种情况下,都会创建目标存储库的新副本(相同的克隆),并将旧副本添加为远程。它们是两个独立的存储库。

不同之处在于,如果您使用语法

git clone /path/to/repo.git

git 将尝试通过在文件系统中为 1. 与 repos 相同和 2. 预计不会更改的文件使用硬链接来节省空间。唯一预期相同且不会更改的文件(除非重新打包对象)是创​​建克隆时 .git/objects 中的文件。

这节省了空间,因为硬链接意味着您在不同的地方多次引用文件的内容,但只存储一次实际内容。(Git 本身实际上在其对象数据库中使用了类似的机制,它不会多次存储唯一文件的内容。)

如果你想强制 git 也为 .git/objects 中的文件创建一个新副本,请使用语法

git clone file:///path/to/repo.git

将实现这一点。

于 2014-02-12T23:58:31.643 回答