从 Git 历史记录中永久删除文件的指南
¶介绍
有时,您可能需要从 Git 历史记录中永久删除文件。这可能是因为意外提交了敏感信息,或者只是为了减少仓库大小。本指南介绍了两种常用的方法:使用 BFG Repo-Cleaner 和 git-filter-repo。这两种方法都会重写 Git 历史记录,因此,遵循安全预防措施以避免数据丢失是至关重要的。
¶安全注意事项
备份您的仓库:在进行任何历史重写之前,请创建仓库的备份。您可以将仓库克隆到单独的位置:
git clone --mirror https://github.com/your-user/your-repo.git your-repo-backup
与您的团队沟通:通知您的团队有关历史重写的情况,因为这将要求所有人重新克隆仓库。
在单独的分支上测试:在单独的分支上执行历史重写,以确保一切正常,然后再将更改推送到主分支。
¶使用 BFG Repo-Cleaner
BFG Repo-Cleaner 是一种删除大型文件或敏感数据的简单快捷的替代方法,比 git-filter-branch 更快更简单。
¶安装
- 从 这里 下载最新版本的 BFG Repo-Cleaner。
- 使用 Java 运行 BFG:
java -jar bfg-1.14.0.jar
¶使用 BFG 删除文件
克隆您的仓库:
git clone --mirror https://github.com/your-user/your-repo.git
cd your-repo.git运行 BFG 删除文件:
java -jar bfg-1.14.0.jar --delete-files your-file.txt
清理和重新打包:
git reflog expire --expire=now --all && git gc --prune=now --aggressive
推送更改:
git push --force
¶使用 git-filter-repo
git-filter-repo 是一个功能强大的工具,用于重写 Git 历史记录,提供比 BFG Repo-Cleaner 更大的灵活性。
¶安装
- 通过 pip 安装:
pip install git-filter-repo
¶使用 git-filter-repo 删除文件
克隆您的仓库:
git clone https://github.com/your-user/your-repo.git
cd your-repo运行 git-filter-repo:
git filter-repo --path your-file.txt --invert-paths
清理和重新打包:
git reflog expire --expire=now --all && git gc --prune=now --aggressive
推送更改:
git push --force
¶结论
通过遵循本指南中描述的步骤,您可以使用 BFG Repo-Cleaner 或 git-filter-repo 安全有效地从 Git 历史记录中删除文件。请记住,在重写历史记录之前备份您的仓库,并与您的团队沟通。