git清理历史大文件,不用的文件,隐私文件
git清理历史大文件,不用的文件
随着代码的日积月累,中间可能不小心上传了大文件,二进制文件,或者隐私文件 即便你在下一次提交删除了这些文件,但是这些文件会依然残留在git仓库的历史长河中。 那我们怎么去清理这些文件呢?同时又保留历史提交记录。
这里要用到一个工具,git-filter-repo。
下面是这个工具的介绍:
git filter-repo是一个改写历史的多功能工具,包括我在其他地方没有发现的功能。它与git filter-branch大致属于同一空间的工具,但没有引起糟糕的性能,有更多的功能,而且设计上超越了琐碎的改写案例,具有很强的可用性。
虽然大多数用户可能只是把filter-repo当作一个简单的命令行工具来使用(而且可能只使用它的几个标志),但其核心是filter-repo包含一个创建历史重写工具的库。因此,有专门需求的用户可以利用它来快速创建全新的历史重写工具。
项目地址:https://github.com/newren/git-filter-repo
安装方式很简单:
pip3 install git-filter-repo
使用方法: 假设我们有一个git repo,git@github.com:example/example.git
首先clone这个repo
git clone git@github.com:example/example.git --bare --mirror
cd example
git filter-repo的一些基础参数
–invert-paths 反向选择下面指定的 –path-{match,glob,regex} 选项中的文件,即只选择不匹配这些选项的文件。
–path-match <dir_or_file>
–path <dir_or_file>
确切的路径(文件或目录),包括在过滤的历史中。可以指定多个 –path 选项来组合多个路径。–path-glob
使用glob语法匹配路径。可以指定多个 –path-glob 选项来获得一个路径。–path-regex
使用正则表达式匹配路径。–use-base-name
匹配文件基础名称,而不是repo顶部的全路径。与–path-rename不兼容,与目录名匹配不兼容。
删除特定的文件/path/secret.txt,该文件包含了密码等机密信息,由于失误提交,不希望它出现在git的历史中
git filter-repo --path /path/secret.txt --invert-paths
删除指定的文件,如在仓库里面的所有png,jpg图片
git filter-repo --path-regex "^.+(png|jpg)$" --invert-paths
然后git filter-repo会重新整理所有的历史记录 等它整理完毕后,继续执行以下命令推送到远程分支
git remote remove origin
git remote add origin git@github.com:example/example.git
git push --all origin --force
- 原文作者:iamdev
- 原文链接:https://blog.iamdev.cn/post/2022/git-clean-history-file/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止转载 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。