首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >git lfs migrate做些什么?

git lfs migrate做些什么?
EN

Stack Overflow用户
提问于 2018-08-10 16:19:07
回答 3查看 19.5K关注 0票数 16

我认为git lfs migrate重写了回购的历史,所以特定的大文件保存在LFS中。这意味着repo应该变得更小,因为它不直接包含大文件的所有版本。但是,当我运行

git lfs migrate import --include="test-data/**" --include-ref=refs/heads/master

test-data/目录中的所有文件都将替换为如下所示的文件:

代码语言:javascript
复制
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

代码语言:javascript
复制
git reflog expire --expire-unreachable=now --all
git gc --prune=now

在运行du之前。之后,大部分空间将由以下文件夹使用:

414M .git/对象398M .git/lfs

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-10-16 03:38:06

唯一的问题是二进制文件的原始git对象仍然在.git文件夹中,因为您没有对它们进行垃圾收集。

您应该遵循git lfs migration tutorial,它解释了:

上面的

成功地将预先存在的git对象转换为lfs对象。但是,常规对象仍然保留在.git目录中。这些文件最终将由git清理,但要立即清理它们,请运行:

代码语言:javascript
复制
git reflog expire --expire-unreachable=now --all
git gc --prune=now

在运行之后,您的.git应该是相同的大小,但是如果您将进入其中,您应该看到objects现在应该比迁移之前小得多,并且lfs可以容纳其余的内容。

更好的消息是,现在当其他开发人员/应用程序克隆存储库时,他们只需下载objects目录,然后将只获取他们检出的“大文件”,而不是整个历史。

票数 13
EN

Stack Overflow用户

发布于 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来解释。

票数 5
EN

Stack Overflow用户

发布于 2020-11-17 01:34:22

如果您迁移,则会出现看起来像git lfs指针的奇怪文件,并替换了工作副本中的文件(在本例中为test-data/中的文件

git lfs track命令后执行

  • 。此命令更改工作副本上所有跟踪的“大文件”。
  • ,而无需提交git lfs track命令对工作副本所做的所有更改。如果您按照教程操作并只提交.gitattributes,而不是所有的“大文件”,则可能会发生这种情况。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51782043

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档