当前位置: 首页 > news >正文

git-filter-repo 清除大文件教程

git filter-repo 是一个用于过滤和清理 Git 仓库历史的工具,它可以高效地批量修改提交历史中的文件内容、删除文件、重命名文件以及进行其他历史重构操作。相较于 git filter-branch,它通常更快且更易于使用。

以下是一个基本示例,说明如何使用 git filter-repo 来删除仓库中特定的大文件:

安装 git-filter-repo

  1. 首先确保你已安装 Python,并且可以通过 pip(Python 的包管理器)来安装软件包。如果没有安装 Python 和 pip,需要先安装它们。

  2. 使用 pip 安装 git-filter-repo

python -m pip install --user git-filter-repo  # 对于个人用户安装
# 或者全局安装(可能需要管理员权限)
python -m pip install git-filter-repo

安装完成后,你可以直接使用 git-filter-repo 命令。但由于它并非 Git 内置命令,你需要在终端中直接调用它的路径或者将它的安装目录添加到系统 PATH 环境变量中。例如,在 Unix/Linux 系统中,如果 git-filter-repo 已经被安装在 ~/.local/bin/ 目录下,你可以通过如下命令临时添加到 PATH 中: 

export PATH=$PATH:~/.local/bin/

win11

C:\Users\w8\AppData\Roaming\Python\Python311\site-packages 

 

既然 git-filter-repo 已经安装完毕,接下来你可以直接在命令行中使用它。但是请注意,在 Windows 系统中,可能需要将 git-filter-repo 的安装路径添加到系统的 PATH 环境变量,以便能在任何目录下执行这个命令。

若要在当前终端会话中临时添加到 PATH,可以运行以下命令(请替换实际的路径):

set PATH=%PATH%;C:\Users\w8\AppData\Roaming\Python\Python311\Scripts

 

如果希望永久生效,你需要编辑系统的环境变量设置:

  1. 右键点击“计算机”或“此电脑”,选择“属性”。

  2. 在左侧菜单栏选择“高级系统设置”。

  3. 在“系统属性”窗口中点击“环境变量”按钮。

  4. 在“系统变量”区域找到名为 Path 的变量,选中后点击“编辑”。

  5. 在“编辑环境变量”窗口中,点击“新建”按钮,然后添加 C:\Users\w8\AppData\Roaming\Python\Python311\Scripts 这个路径。

  6. 点击“确定”保存所有更改。

完成以上步骤后,你应该能够在命令行中直接运行 git filter-repo 命令了

删除仓库历史中的大文件

假设你想删除历史记录中所有包含名为 large_file.txt 的文件,并且你知道这个文件存在于所有的提交中。

  1. 首先备份你的仓库,以防万一:

    1cp -r your_repo your_repo_backup

  2. 进入要处理的仓库目录:

    1cd your_repo

  3. 使用 git filter-repo 删除指定文件:

    1git filter-repo --force --invert-paths --path large_file.txt

    参数解释:

    • --force:允许覆盖当前仓库。

    • --invert-paths:保留不匹配路径的提交,这里是反选,即删除匹配路径的文件。

    • --path large_file.txt:指定要从历史中删除的文件名。

  4. 清理并优化本地仓库:

    1git reflog expire --all --expire-unreachable=now --update-reflogs
    2git gc --prune=now --aggressive

  5. 推送更改到远程仓库(如果必要的话):

    1git push origin --force --all
    2git push origin --force --tags

    注意:由于你改变了历史记录,所以需要用 --force 强制推送,并通知协作者他们需要重新克隆更新后的仓库。

其他高级用法

除了删除文件外,git filter-repo 还可以实现更多的功能,例如:

  • 删除符合某种模式的所有文件:

    1git filter-repo --force --path-glob '*.zip'

  • 替换文件内容:

    1git filter-repo --replace-text <replacement-file>

    <replacement-file> 中定义替换规则。

  • 根据大小过滤文件:

    1git filter-repo --strip-blobs-bigger-than 10M

    删除大于10MB的二进制文件。

  • 更多复杂操作,请参考官方文档:https://github.com/newren/git-filter-repo/blob/main/README.md

请根据具体需求调整命令参数,并始终谨慎操作,因为修改历史记录会影响所有仓库使用者。在执行这些操作前务必创建仓库备份。

相关文章:

  • K8S学习之基础十:k8s中初始化容器和主容器
  • 游戏辅助技术教程【预习课】
  • FPGA-按键消抖
  • 信息安全技术、加密、摘要、签名、PKI(高软41)
  • Java数组详解/从JVM理解数组/数组反转/随机排名/数组在计算机如何存储
  • 【DeepSeek】Ubuntu快速部署DeepSeek(Ollama方式)
  • 2024华为OD机试真题-字符串加密算法(C++)-E卷-100分
  • 机器学习-GBDT算法
  • 数字组合(信息学奥赛一本通-1291)
  • 《深度学习进阶》第7集:深度实战 通过训练一个智能体玩游戏 来洞察 强化学习(RL)与决策系统
  • 全新方案80M/S,告别限速!
  • 阿里云云监控资源告警常用模板
  • 软考架构师笔记-计算机网络
  • Pytest测试用例执行跳过的3种方式
  • 浅论数据库聚合:合理使用LambdaQueryWrapper和XML
  • [数据可视化的python脚本实现]关于餐厅消费的不同维度分析
  • 【MySQL】事务(隔离性、MVCC)
  • 2025-03-06 ffmpeg提取SPS/PPS/SEI ( extradata )
  • 【国产Linux | 银河麒麟】麒麟化龙——KylinOS下载到安装一条龙服务,起飞!
  • DeepSeek接入chatDev实现 智能编程
  • 圆桌丨全球化博弈与人工智能背景下,企业如何落地合规体系
  • 国寿资产获批参与第三批保险资金长期投资改革试点
  • 中期选举后第三势力成“莎拉弹劾案”关键,菲律宾权斗更趋复杂激烈
  • 江苏省委组织部副部长高颜已任南京市委常委、组织部部长
  • 俄外交部:俄乌伊斯坦布尔谈判改在当地时间15日下午举行
  • 证券日报:降准今日正式落地,年内或还有降准空间