目 录CONTENT

文章目录

🚀 Git 仓库终极瘦身指南:使用 git-filter-repo 完美剔除历史大文件

允诺
2026-03-28 / 0 评论 / 0 点赞 / 1 阅读 / 0 字 / 正在检测是否收录...
温馨提示:
部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

🚀 Git 仓库终极瘦身指南:使用 git-filter-repo 完美剔除历史大文件

背景痛点

接手同事的旧项目,发现源码只有 100 多 M,但整个 Git 仓库却高达 2.6G!直接在工作区删除大文件并 commit 毫无作用,因为 Git 的核心机制是“记住一切”,大文件依然死死躺在 .git 的历史记录里。当你想把项目迁移到新仓库时,那 2.6G 的历史包袱也会跟着一起推上去。

本文将教你如何使用官方推荐的终极武器 git-filter-repo,彻底改写 Git 历史,剔除不需要的大文件和冗余分支,干干净净地迁移到新仓库。

⚠️ 第一步:防翻车准备(非常重要)

操作前,务必把当前的本地项目文件夹复制备份一份! 修改 Git 历史属于破坏性操作,一旦误操作会导致代码丢失。做好备份,我们就可以大胆折腾。

第二步:安装工具

git-filter-repo 是目前 Git 官方推荐的历史重写工具,依赖 Python。

在终端执行以下命令安装:

# 使用 pip 安装
pip install git-filter-repo

# macOS 用户也可以使用 brew
brew install git-filter-repo

第三步:执行“剔骨”清理

进入你的项目根目录。你可以根据实际需求,选择按大小或者按路径清理。

情况 A:精准删除特定目录或文件(例如冗余的 ISO 文件或 .idea 配置)

# --path 指定要删除的路径,--invert-paths 表示反向选择(即剔除该路径)
# --force 用于强制执行(防止工具提示非全新 clone 而拒绝工作)
git filter-repo --path tinyLinuxISO --invert-paths --force
git filter-repo --path raidConfigure_linux --invert-paths --force
git filter-repo --path .idea --invert-paths --force

💡 技巧:你可以使用多个 --path 一次性干掉多个目标。

情况 B:简单粗暴按大小清理

# 剔除历史记录中所有大于 50M 的文件
git filter-repo --strip-blobs-bigger-than 50M --force

执行完毕后,使用 ls -a 查看,目标文件已彻底消失,且项目体积大幅缩水!

第四步:整理分支,重命名为 main

以前的代码可能有一堆乱七八糟的本地分支,趁着这次净化,我们只留一条主线,并统一命名为 main

# 切换到你想要保留的主分支(假设原先叫 master)
git checkout master

# 将当前分支重命名为 main
git branch -m main

第五步:重新绑定远程仓库并推送

🔥 避坑高能预警: git-filter-repo 出于安全保护机制,在重写历史后,会自动删除你本地关联的远程仓库地址(origin)。如果你直接 push,会报 fatal: 'origin' does not appear to be a git repository 的错误。

所以,我们需要重新绑定新仓库,然后单独推送 main 分支:

# 1. 重新绑定你新建的纯净远程仓库地址
git remote add origin http://你的Git地址/你的项目.git

# 2. 将本地的 main 分支推送到远端(仅推送这一条线,抛弃其他旧分支)
git push -u origin main

如果中间你又发现漏删了什么东西(比如刚推上去又自动生成了 .idea),重新走一遍第三步清理后,使用强制推送覆盖远程记录即可:

# 强行覆盖远程仓库
git push -u origin main -f

第六步:亡羊补牢,配置 .gitignore

为了防止编辑器或系统再次生成垃圾文件(如 .idea, .DS_Store)并被提交,务必在项目根目录创建或更新 .gitignore 文件:

.idea/
*.log
# 其他不需要追踪的文件...
0

评论区