Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
本地回购是否需要Git LFS?_Git_Git Lfs - Fatal编程技术网

本地回购是否需要Git LFS?

本地回购是否需要Git LFS?,git,git-lfs,Git,Git Lfs,我创建了一个Git repo,它将专门存储在本地,我问自己,我是否真的需要Git LFS用于二进制文件?据我所知,.gittributes已正确配置,如下所示: *.psd binary 是的,文件放在.git/objects/…中,但它们是压缩的,不会占用太多空间。总之,如果我从不从远程repo推/拉/到远程repo,那么本地存储库中的Git LFS有什么好处 谢谢 虽然Git提交是存储库内容的完整“快照”,但实际上不会再次存储文件。Git将文件内容存储为“blob对象”,由内容校验和标识;

我创建了一个Git repo,它将专门存储在本地,我问自己,我是否真的需要Git LFS用于二进制文件?据我所知,
.gittributes
已正确配置,如下所示:

*.psd binary
是的,文件放在
.git/objects/…
中,但它们是压缩的,不会占用太多空间。总之,如果我从不从远程repo推/拉/到远程repo,那么本地存储库中的Git LFS有什么好处


谢谢

虽然Git提交是存储库内容的完整“快照”,但实际上不会再次存储文件。Git将文件内容存储为“blob对象”,由内容校验和标识;只有内容、文件名和权限存储在树对象中。如果您提交对文件的更改,Git会将整个文件再次(压缩)存储为一个新blob;任何未更改的文件都将重用现有blob。如果您有两个内容相同的文件,它们将共享同一个blob

如果没有git lfs,每次提交对二进制文件的更改时,整个文件(压缩)都必须再次存储在新的blob中。由于Git存储库是项目的完整历史记录,因此一段时间后,这可能会占用大量磁盘空间。如果空间很紧,这可能对你很重要


幸运的是,你现在不必做出这个决定。如果存储库太大,您可以随时添加到@Schwern已经提供的优秀答案中,并回复OP的评论

以下是支持此扩展的atlassian公司的GIT LFS文档

其思想是从“远程”存储库中缓慢地下载二进制文件,即在签出过程中,而不是在克隆或获取过程中

从技术上讲,git lfs存储指向二进制文件的“惰性”评估指针

这很有意义,因为git有一个“承诺”,即在每次提交后都能够为您提供对代码库状态的访问,因此可能出现以下情况:

  • 提交:添加了一个大的二进制文件A.bin(假设A.bin在版本1中)
  • 推动变革
  • 提交B:对二进制文件a.bin进行了更改(a.bin现在在版本2中)
  • 推动变革
  • 现在签出提交A的SHA1——git必须在版本1中为您提供一个.bin
  • 这是正确的,即使您决定删除a.bin并提交它,在“提交a”之后仍有可能访问文件系统状态。 因此,如果您明确不需要版本1,那么至少在本地存储版本1是没有意义的


    还有一点需要注意,直接回答问题并澄清:是的,您必须在本地启用git lfs支持,但除此之外,您还必须在远程回购上启用git lfs支持(我曾经用bit bucket实现过一次,我相信它的竞争对手也支持这一点)。

    据我所知,设置
    binary
    属性只会影响
    git diff
    的行为。我认为这不会影响文件的存储方式。这是有道理的!谢谢谢谢你知道为什么吗?如果文件未更改,则应生成相同的提交文件sha,否?@DanielStephens否,如果文件未更改,则将生成相同的blob ID,且内容不会重复。看,谢谢!那你能详细说明你的第一句话吗?只是为了让我理解其中的区别。我会接受这一点,作为一个整体answer@DanielStephens这是怎么回事?@DanielStephens没有将大型文件的历史内容存储在磁盘上,而是将它们存储在云存储中,并根据需要获取它们。由于您在本地进行提交,我认为它将缓存它们。您可能需要手动清除lfs缓存。谢谢!这是一个极好的补充!但对我来说,Git LFS似乎只有在涉及远程回购的情况下才是必要和有益的,对吗?如果回购协议从来没有离开过机器,那就没有那么好了,对吗?嗯,是的,我想是的,尽管我从未见过有人只在本地使用git lfs…非常感谢你的回答!