在我的公司,我们使用git LFS存储系统开发相关的文件。该存储库包含 CAD 数据、图像、文档(*.pdf、*.docx、*.xlsx)等。绝对有必要将所有文件置于版本控制之下。然而,尽管 LFS 跟踪所有文件,但存储库的使用方式最终导致存储库的总大小达到 8GB。
基本上所有内容都被推送到主分支上,这似乎使 LFS 存储变得过时,因为无法修剪任何内容来保存本地存储。
问题
有没有办法让更多的本地对象被追溯修剪?
您可以使用以下命令
git lfs prune
Run Code Online (Sandbox Code Playgroud)
从文档中,
描述
删除旧的 LFS 文件的本地副本,从而释放磁盘空间。Prune 的操作方式是枚举所有本地存储的对象,然后删除任何未被至少以下一项引用的对象:
- 当前结帐
- “最近的分支”;请参阅[最近的文件]
- 当前分支或最近分支上的“最近提交”;请参阅[最近的文件]
- 尚未推送的提交;请参阅[未推送的 LFS 文件]
- 任何其他工作树结账;请参阅 git-worktree(1)
一般来说,修剪将删除您当前未使用且不是“最近”的文件,只要它们已被推送,即本地副本不是唯一的文件。
不考虑引用日志,只考虑提交。因此,仅由孤立提交引用的 LFS 对象始终会被删除。
注意:如果您有不同的存储库共享相同的自定义存储目录,则不应运行 git lfs prune ;有关 lfs.storage 选项的更多详细信息,请参阅 git-lfs-config(1)。
由于当前签出引用了 LFS 跟踪文件,因此您无法修剪,因此您可以使用以下GIT_LFS_SKIP_SMUDGE 设置克隆没有 LFS 跟踪文件的本地存储库
export GIT_LFS_SKIP_SMUDGE=1
git clone /path/to/local/repo test
Run Code Online (Sandbox Code Playgroud)
这应该会减少存储库的大小,因为 LFS 跟踪文件将转换为指针文件。如果你想使用 LFS 跟踪文件,你需要做一个git lfs pull.
由于git lfs pull将在当前签出中下载所有 LFS 跟踪文件,因此您可以使用包含和排除选项来包含或排除特定文件。
例如,您可以通过以下方式将所有 pdf(LFS 跟踪文件)包含在存储库中
git lfs pull -I "*.pdf"
Run Code Online (Sandbox Code Playgroud)
或通过排除它们
git lfs pull -X "*.pdf"
Run Code Online (Sandbox Code Playgroud)
请注意,您可以从远程存储库本身进行克隆,将本地存储库克隆到测试存储库只是一个示例,以显示大小已减小。