仅在分支HEAD中存储最新git-lfs文件以节省存储空间
解决Git LFS空间不足的Docker镜像存储工作流
方案一:临时分支+Squash合并(无需强制推送)
- 每次更新镜像时,从master拉取最新代码创建临时分支:
git checkout -b temp-image-build - 构建Docker镜像并导出为tar包,确保Git LFS已跟踪该文件(未设置过的话先执行
git lfs track "*.tar") - 提交并推送临时分支:
git add . && git commit -m "Build latest Docker image" && git push origin temp-image-build - 切换回master分支:
git checkout master - 用Squash合并将临时分支的镜像提交合并到当前master的最新提交中:
git merge --squash temp-image-build - 提交合并后的内容:
git commit -m "Update Docker image to latest version" - 正常推送master分支:
git push origin master(完全不需要强制推送) - 清理本地和远程临时分支:
git branch -D temp-image-build、git push origin --delete temp-image-build - 清理本地废弃LFS对象:
git lfs prune;若有权限,可在远程仓库后台开启自动清理,或联系管理员执行远程LFS清理
方案二:安全强制推送(仅覆盖最新提交)
如果不想用临时分支,直接在master上操作的话,可采用这种更安全的强制推送方式:
- 先拉取最新master代码:
git pull origin master --rebase - 更新Docker镜像tar包后,覆盖最后一次提交:
git add . && git commit --amend --no-edit - 用
--force-with-lease推送,该命令会检查远程master是否与本地拉取的版本一致,避免误覆盖他人提交:git push origin master --force-with-lease - 同样清理废弃LFS对象:
git lfs prune
核心效果
两种方案都能确保只有master分支的HEAD提交保留有效的Docker镜像LFS指针,历史提交中的旧指针会被丢弃,对应的旧镜像也会通过LFS清理操作从存储空间中移除,完美解决空间不足的问题。
内容的提问来源于stack exchange,提问作者Simon Dubek
相关产品推荐
相关产品推荐

