【问题标题】:How to shrink a git LFS repo如何缩小 git LFS 存储库
【发布时间】:2020-04-28 00:27:02
【问题描述】:

在我的公司,我们用 git LFS 存储系统开发相关的文件。此存储库包含 CAD 数据、图像、文档(*.pdf、*.docx、*.xlsx)等。绝对有必要将所有文件置于版本控制之下。然而,尽管所有文件都被 LFS 跟踪,但存储库的使用方式最终使存储库的总大小达到 8GB。

基本上所有内容都被推送到 master 分支,这似乎使 LFS 存储变得过时,因为没有任何东西可以修剪以节省本地存储。

问题

有没有办法允许追溯修剪更多的本地对象?

【问题讨论】:

  • LFS 是否跟踪文件数据、图像、文档(*.pdf、*.docx、*.xlsx)
  • 是的,所有文件都被 LFS 跟踪。相应地更新了问题。

标签: git git-lfs


【解决方案1】:

你可以使用下面的命令

git lfs prune

来自docs

描述

删除旧的 LFS 文件的本地副本,因此 释放磁盘空间。 Prune 通过枚举所有本地 存储的对象,然后删除任何未被 at 引用的对象 以下至少一项:

  • 当前结帐
  • “最近的分支”;请参阅 [最近的文件]
  • 当前分支或最近分支上的“最近提交”;请参阅 [最近的文件]
  • 尚未推送的提交;请参阅[未推送的 LFS 文件]
  • 任何其他工作树结帐;见 git-worktree(1)

一般来说,修剪会 删除您当前未使用且不是“最近”的文件,因此 只要它们被推送,即本地副本不是唯一的。

不考虑 reflog,只考虑提交。因此 LFS 对象 仅被孤立提交引用的总是被删除。

注意:如果你有不同的,你不应该运行 git lfs prune 共享相同自定义存储目录的存储库;看 git-lfs-config(1) 了解更多关于 lfs.storage 选项的细节。


由于当前结帐引用了 LFS 跟踪的文件,因此您无法进行修剪,因此您可以使用 GIT_LFS_SKIP_SMUDGE setting 克隆没有 LFS 跟踪的文件的本地存储库

export GIT_LFS_SKIP_SMUDGE=1
git clone /path/to/local/repo test

这应该会减少 repo 的大小,因为 LFS 跟踪的文件将被转换为指针文件。如果你想使用 LFS 跟踪的文件,你需要做一个git lfs pull

由于git lfs pull 将下载当前结帐中的所有 LFS 跟踪文件,您可以使用包含和排除 options 来包含或排除特定文件。

例如,您可以通过

在 repo 中包含所有 pdf(LFS 跟踪文件)
git lfs pull -I "*.pdf"

或通过

排除它们
git lfs pull -X "*.pdf"

请注意,您可以从远程 repo 本身进行克隆,将本地 repo 克隆到测试 repo 只是一个示例,以表明大小减少。

【讨论】:

  • 谢谢,但我知道文档。正如我所写,一切都在master 上,所以当前的结帐,使得 LFS 变得多余。
  • By master 上的所有内容,它是否还包括 LFS 跟踪的文件?我很困惑为什么 LFS 是多余的,是不是因为应该由 LFS 跟踪的文件已作为普通文件推送到 master ?
  • 尽管所有文件都被 LFS 跟踪,但将存储库的总大小增加到 8GB,您可以通过检查大小来确认 LFS 文件是否导致大小增加.git/lfs 目录的大小以及它对存储库总大小的贡献(因为您关心的是本地存储库)
  • 是的,这意味着所有文件都被推送到master,LFS轨道也是如此。而且,只要 当前结帐 引用它们,就不会修剪任何文件,我将永远无法减少本地存储库的大小。
  • .git/lfs 的总大小为 2GB。
猜你喜欢
  • 1970-01-01
  • 2016-11-13
  • 2019-10-10
  • 1970-01-01
  • 1970-01-01
  • 2020-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多