【问题标题】:GIT: remote reposity, difference between hard link and file://GIT:远程仓库,硬链接和file://的区别
【发布时间】:2014-02-11 16:54:04
【问题描述】:
我目前正在阅读 Jon Loeliger 的书 Version Control with Git。
它谈到了硬链接和file:// 之间的两个细微差别:
如您所见,Git URL 的最简单形式是指本地文件上的存储库-
系统,无论是真正的物理文件系统还是通过本地安装的虚拟文件系统
网络文件系统 (NFS)。有两种排列方式:
/path/to/repo.git
file:///path/to/repo.git
虽然这两种格式本质上是相同的,但有一个微妙但重要的地方
两者的区别。前者使用文件系统中的硬链接直接
在当前和远程存储库之间共享完全相同的对象;后者
复制对象而不是直接共享它们。为了避免与相关的问题
共享存储库,建议使用file:// 表单。
起初,我确实认为我克隆的 repo ./git/object 文件夹是指向远程 .git/object 的链接,但我想不是。
谁能解释一下?
【问题讨论】:
标签:
git
remote-access
refspec
【解决方案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
会做到的。