git - git lfs migrate 做什么?

标签 git git-lfs

我认为 git lfs migrate 重写了 repo 的历史,以便将指定的大文件保存在 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 在做什么

编辑:我做了 clean after migration

git reflog expire --expire-unreachable=now --all
git gc --prune=now

在运行 du 之前。之后,大部分空间被这些文件夹使用:

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

最佳答案

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

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

The above successfully converts pre-existing git objects to lfs objects. However, the regular objects still persist in the .git directory. These will be cleaned up eventually by git, but to clean them up right away, run:

git reflog expire --expire-unreachable=now --all
git gc --prune=now

运行后你的 .git 应该是相同的大小,但是如果你进入它你应该看到 objects 现在应该比迁移之前小得多并且 lfs 保留其余部分。

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

关于git - git lfs migrate 做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51782043/

相关文章:

git graph 线条和星号表示什么?

git - SVN -> Git 迁移后如何彻底清理?

svn - Subversion 存储库中的 Git 工作副本

git - 如何将 Git LFS 文件的旧版本打印到标准输出(Git show/git cat-file for LFS)?

git - 使用 git-bundle 传输对多个分支所做的更改

git - git fetch到底能做什么?

Git LFS 不适用于 TeamCity 代理

git - git lfs migrate import 后文件变得无法读取,如何撤消

git - 克隆使用 git lfs 且一直不提供密码的 gitlab 项目

git - 如何使用 LFS 将 200MB 的文件正确上传到 GitHub