我目前正在阅读Jon Loeliger的书Version Control with Git。
它讨论了硬链接与file://
:
如您所见,最简单的Git URL形式是指本地文件上的存储库 - 系统,无论是真正的物理文件系统还是通过本地安装的虚拟文件系统 网络文件系统(NFS)。有两种排列:
/path/to/repo.git
file:///path/to/repo.git
虽然这两种格式基本相同,但有一个微妙但重要的 区分两者。前者直接使用文件系统中的硬链接 在当前和远程存储库之间共享完全相同的对象;后者 复制对象而不是直接共享它们。避免与之相关的问题 共享存储库,建议使用
file://
表单。
起初,我确实认为我的克隆回购./git/object
文件夹是远程.git/object
的链接,但我想不是。
有人可以解释一下吗?
答案 0 :(得分:1)
git clone
都会创建目标存储库的新副本(相同的克隆),旧的副本作为远程存储库添加。它们是两个独立的回购。
不同之处在于,如果您使用语法
git clone /path/to/repo.git
git将尝试通过在文件系统中使用硬链接来节省空间,以获得与repos和2.不相同的文件。唯一预期相同但不更改的文件(重新打包对象除外)是创建克隆时.git / objects中的文件。
这节省了空间,因为硬链接意味着您在不同的地方多次引用文件的内容,但只存储一次实际内容。 (Git本身实际上在其对象数据库中使用了类似的机制,它不会多次存储唯一文件的内容。)
如果你想强制git使用语法
创建.git / objects文件的新副本git clone file:///path/to/repo.git
将实现这一点。