【问题标题】: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

会做到的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-22
    • 2016-11-12
    • 2017-04-15
    • 2014-11-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多