如何移除Git仓库中docs文件夹的历史以节省存储空间?
移除docs/文件夹历史以减小Git仓库体积
一、重写Git历史,清除docs/的旧版本记录
由于仓库历史中积累了大量docs/文件夹的旧大文件,需要通过重写Git历史彻底移除这些记录,只保留当前最新的docs/内容:
本地克隆仓库并备份当前docs/内容
# 克隆仓库到本地 git clone https://github.com/你的用户名/你的仓库名.git cd 你的仓库名 # 把当前docs/备份到仓库外,避免操作丢失 cp -r docs/ ../docs-latest-backup/用git filter-repo清除所有历史中的docs/记录
git filter-repo是Git官方推荐替代git filter-branch的工具,高效且不易出错。执行以下命令移除所有历史提交里的docs/文件夹:git filter-repo --path docs/ --invert-paths该命令会遍历所有历史提交,删除其中涉及docs/的所有文件变更,仅保留data/等其他文件夹的完整历史。
恢复最新的docs/内容并提交
将备份的docs/复制回仓库,提交到重写后的历史中:cp -r ../docs-latest-backup/ docs/ git add docs/ git commit -m "Restore latest docs content"强制推送到远程仓库
因为重写了Git历史,必须强制推送覆盖远程仓库的旧历史:git push origin main --force(若你的主分支不是
main,替换为对应的分支名,比如master)
二、调整GitHub Actions流程,避免未来仓库膨胀
原更新流程每次会产生新提交(先删除docs/再添加新内容),导致历史不断积累大文件。可修改流程,直接覆盖docs/内容并修改最新提交,避免新增历史记录:
修改更新脚本
移除原来的git rm *和单独的push步骤,改为:# 解压tar包到docs/目录(覆盖原有内容) tar xvf 你的压缩包.tar -C docs/ # 暂存docs/的所有变更 git add docs/ # 修改最新提交,替换docs/内容,不产生新提交 git commit --amend --no-edit # 安全强制推送(比--force更安全,避免覆盖他人未推送的变更) git push origin main --force-with-lease配置Actions权限
默认的GITHUB_TOKEN通常没有强制推送权限,需在Workflow中使用**个人访问令牌(PAT)**替代,或在仓库设置的Actions权限中开启允许强制推送。
三、清理远程仓库垃圾
重写历史后,GitHub远程仓库的旧历史对象会暂时保留,一般等待1-7天会自动被垃圾回收。若想尽快清理,可联系GitHub支持,或等待系统自动处理,之后仓库体积会明显减小。
注意事项
- 重写历史后,所有本地克隆过该仓库的副本都需重新克隆,旧历史已被覆盖,拉取会产生冲突。
- 操作前务必备份整个仓库,避免数据丢失。
data/文件夹的历史不会受上述操作影响,会完整保留。
内容的提问来源于stack exchange,提问作者Harald
相关产品推荐
相关产品推荐

