我认为git lfs migrate重写了回购的历史,所以特定的大文件保存在LFS中。这意味着repo应该变得更小,因为它不直接包含大文件的所有版本。但是,当我运行
git lfs migrate import --include="test-data/**" --include-ref=refs/heads/master
test-data/目录中的所有文件都将替换为如下所示的文件:
version https://git-lfs.github.com/spec/v1
oid sha256:5853b5a2a95eaca53865df996aee1d911866f754e6089c2fe68875459f44dc55
size 19993296并且.git文件夹变得两倍大(400MB到800MB)。我很困惑。什么是git lfs migrate doing
编辑:I did clean after migration
git reflog expire --expire-unreachable=now --all
git gc --prune=now在运行du之前。之后,大部分空间将由以下文件夹使用:
414M .git/对象398M .git/lfs
发布于 2018-10-16 03:38:06
唯一的问题是二进制文件的原始git对象仍然在.git文件夹中,因为您没有对它们进行垃圾收集。
您应该遵循git lfs migration tutorial,它解释了:
上面的
成功地将预先存在的git对象转换为lfs对象。但是,常规对象仍然保留在.git目录中。这些文件最终将由git清理,但要立即清理它们,请运行:
git reflog expire --expire-unreachable=now --all
git gc --prune=now在运行之后,您的.git应该是相同的大小,但是如果您将进入其中,您应该看到objects现在应该比迁移之前小得多,并且lfs可以容纳其余的内容。
更好的消息是,现在当其他开发人员/应用程序克隆存储库时,他们只需下载objects目录,然后将只获取他们检出的“大文件”,而不是整个历史。
发布于 2018-08-10 17:33:21
我认为git LFS migrate重写了repo的历史,所以特定的大文件被保存在lfs中。
完全正确。
这意味着存储库应该变得更小,因为它不直接包含大文件的所有版本。
不完全是真的。git lfs的承诺不是你的repo会更小,而是当你克隆的时候,你不需要下载所有的git对象,所以克隆会更小更快。因为对于由git-lfs管理的文件,在git checkout期间只会下载应该出现在您的工作目录中的文件。
测试数据/目录中的所有文件都将替换为如下所示的文件:
这就是git-lfs的工作原理。它不是在存储库中提交文件,而是提交一个包含对象id的这个“指针”文件。文件的内容存储在.git/lfs/objects文件夹中。当您使用git push时,这些对象将被上传到服务器。
和.git文件夹会变得两倍大(400MB到800MB)。我很困惑。
因为git lfs管理的所有文件都存储在这个文件夹中,所以它可能会变得很大。我还认为它使存储库的大小翻了一番,因为对象暂时存储了两次。在.git/objects中,直到您丢弃旧的历史记录(由purging the reflog and doing a git gc编写。但是,一旦您确定您的lfs迁移是成功的),那么在.git/lfs/objects中执行此操作,因为您已经进行了git lfs转换。
我认为(但我不确定) .git/lfs/objects作为一个缓存文件夹,所以一旦你推送了所有新的历史记录,所以它上传了由lfs管理的文件,你可以删除它来减小你的存储库的大小。但是如果我是你,我就不会这么做!
为了查看git lfs在本地存储库上的实际效果,一旦您--force推送了新的历史记录(并且旧的历史记录不再存在于远程存储库中),我将执行一个全新的克隆。现在,您的本地存储库应该更小了。
但是,以后每次下载这些文件的新版本时,文件夹.git/lfs/objects都会变大(但它应该始终比不使用git lfs时更小)。
我希望你能更好地理解它是如何工作的。
PS:
测试数据/目录中的所有文件都将替换为如下所示的文件:
我希望你说的话有一部分是假的。您在test-data/中的文件仍然包含良好的内容,但您报告的是git命令向您显示的内容……你能确认一下吗?或者你有问题..。这可以用没有安装git lfs来解释。
发布于 2020-11-17 01:34:22
如果您迁移,则会出现看起来像git lfs指针的奇怪文件,并替换了工作副本中的文件(在本例中为test-data/中的文件
在git lfs track命令后执行
git lfs track命令对工作副本所做的所有更改。如果您按照教程操作并只提交.gitattributes,而不是所有的“大文件”,则可能会发生这种情况。https://stackoverflow.com/questions/51782043
复制相似问题