GIT:远程存储库,硬链接和文件之间的区别://

时间:2014-01-21 21:16:34

标签: git remote-access refspec

我目前正在阅读Jon Loeliger的书Version Control with Git

它讨论了硬链接与file://

之间的两个细微差别
  

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

     

/path/to/repo.git

     

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

     

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

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

有人可以解释一下吗?

1 个答案:

答案 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

将实现这一点。