git lfs 使用指针文件处理 repo 中的重复文件

git lfs handling of duplicated files in a repo using pointer files

我必须在不同目录的存储库中复制由 git lfs 处理的文件(相同名称,相同内容)两次,以便我们的第 3 方软件正常工作。这是我必须忍受的第 3 方软件的限制。

git lfs智能识别它们是同一个文件,只下载一次到本地repo。其他文件只是得到一个指向真实文件位置的指针。这会导致第 3 方软件出现问题,因为它无法读取指针。

有什么方法可以强制 Git LFS 复制文件而不是指向它? 或者有人可以指出记录此行为的位置,以便我向同事解释吗?

TL;DR

不要在要在 Windows 和 Linux/Mac 上使用的回购中使用符号链接。

符号链接的问题

根据问题下的评论,事实证明 repo 没有大文件的两个副本,而是一个副本,以及指向它的 Linux 样式的符号链接。

Git 完全支持符号链接 - 您可以添加它们、修改它们、签入它们、签出它们。只要您留在 Linux,一切都会正常。

但是 Windows 不支持 Linux 风格的符号链接,所以你得到的东西是坏的,正如你在问题下的评论中描述的那样。

解决方案:摆脱符号链接是跨平台的回购

这似乎不是一个好的解决方案,但如果您的存储库打算用于 Windows 和 *nix 操作系统,请避免使用符号链接。

你仍然会保存一些 space,至少在 Git 服务器上,在 Git LFS 存储中也是如此,因为 Git 足够聪明,可以重用当 repo 中有两个相同的文件时,相同的 blob。事实上,它无法做任何其他事情,因为 blob 的 sha1 哈希是用来存储和检索 blob 的!您将在使用该存储库的每个沙箱中拥有它的两个副本。