git filter-repo(优秀的 git repo 历史重写工具) 实战

前言

最近看到好几个有意思的repo, 不过各自的产品想法上都有延伸, 于是手痒自己也从基础版开始尝试改造.

等到后面逐渐成型了, 发现 git init 的位置选在了根目录, 其它的参考 repo 也都在下面.

如何将自己的项目文件夹剥离出来呢? 这就要用到本文的主角了 git filter-repo

简介

git filter-repo 是一个用于重写 Git 仓库历史的现代化工具,它是 git filter-branch 的替代品,具有以下特点:

主要功能:

  • 删除敏感数据: 从整个 Git 历史中移除密码、密钥等敏感信息
  • 清理大文件: 删除历史中的大文件以减小仓库体积
  • 重写提交历史: 修改作者信息、邮箱、提交信息等
  • 目录重组: 提取子目录、合并仓库、重命名路径
  • 过滤文件: 按文件名、路径、大小等条件过滤历史记录

核心优势:

  • 性能优异 : 比 git filter-branch 快 10-100 倍
  • 使用简单: 命令行接口更直观易用
  • 功能强大: 支持 Python 脚本进行复杂的自定义过滤
  • 安全可靠: 内置多种安全检查,避免数据丢失

典型使用场景:

bash 复制代码
# 删除某个文件的所有历史记录
git filter-repo --path 文件名 --invert-paths

# 删除大于指定大小的文件
git filter-repo --strip-blobs-bigger-than 10M

# 提取某个子目录作为新仓库
git filter-repo --path 子目录/ --path-rename 子目录/:

注意事项:

  • 会重写整个 Git 历史,所有 commit SHA 都会改变
  • 使用前建议备份仓库
  • 操作后需要强制推送 (git push --force)

实战

安装

建议直接参考 官方安装手册

使用

bash 复制代码
     步骤 1:备份原仓库

     # 创建完整备份
     cd /Users/THIS/IS/YOUR/ORI/REPO/PATH
     cp -r SeanProj SeanProj.backup

     步骤 2:克隆仓库用于提取

     # 创建独立副本
     cd /Users/THIS/IS/YOUR/ORI/REPO/PATH
     git clone SeanProj SeanProj-standalone
     cd SeanProj-standalone

     步骤 3:执行提取操作

     # 保留 所需目录,并移到根目录
     git filter-repo --path Target-dir/ --path-rename Target-dir/: --force

     命令说明:
     - --path Target-dir/:只保留 Target-dir/ 目录的文件
     - --path-rename Target-dir/::将 Target-dir/ 移到仓库根目录
     - --force:强制执行(因为是 clone 的仓库)

     步骤 4:验证结果

     # 检查分支,看下是不是跟原来一样
     git branch -a

     # 检查标签
     git tag

     # 检查提交数
     git log --all --oneline | wc -l

     # 检查文件结构(应该在根目录)
     ls -la

     # 检查仓库大小
     du -sh .git

🎉 完成

至此, 你应该就成功的把之前冗余的项目成功剥离出自己需要的部分~

相关推荐
mister_guo7 小时前
开发指南:Git日常维护与常用命令
git
鶴哥只手遮天12 小时前
Git 2.56 源码深度剖析:为 Git 3.0 铺路的架构重构
git·开源
小此方15 小时前
「插曲:Git」标签管理篇:理解Tag标签、为指定提交打标签、查看标签详情与附注标签
git
Madison-No716 小时前
多语言聊天大模型--测试报告
linux·git·python·selenium·jmeter·自动化·postman
小此方16 小时前
「插曲:Git」多人协作篇:远程分支创建与关联、多人协作冲突解决、Feature分支开发与合并、git remote prune清理失效分支
git
可乐ea18 小时前
Git 基础设施重建:智能体规模开发下的读写解耦
大数据·git·elasticsearch·分布式存储·git基础设施·智能体规模开发·读写解耦
信可维21 小时前
AI 说「改完了」怎么确认真改完了:git diff + 测试 + 一张验收表的 3 步复核
人工智能·git
Sun子矜1 天前
Git+Gitee 新手教程精简归纳版
git·gitee
亿道电子Emdoor1 天前
【Perforce】Klocwork-kwgcheck图形化界面无法打开如何解决
git·python·github
小此方2 天前
「插曲:Git」企业规范篇:DevOps开发模型、Git Flow五类分支设计与测试/预发布/生产环境Bug修复及Hotfix紧急发布流程
git·bug·devops