Git 中清除历史记录中的大文件夹或大文件
在 Git 中清除历史记录中的大文件夹或大文件,可以通过以下步骤实现。这通常需要使用 git filter-repo
或 git filter-branch
工具。以下是推荐的方式:
方法 1:使用 git filter-repo
(推荐)
git filter-repo
是一个更现代、更高效的工具,适合清理历史记录。
步骤:
安装
git filter-repo
如果尚未安装,可以通过以下方式安装:1
pip install git-filter-repo
备份当前仓库 在操作之前,建议备份当前仓库,以防误操作导致数据丢失:
1
cp -r your-repo your-repo-backup
清除大文件夹 假设你要清除名为
large-folder
的文件夹:1
git filter-repo --path large-folder --invert-paths
--path
指定要操作的路径。--invert-paths
表示删除指定路径的内容。
强制推送到远程仓库 清理完成后,需要强制推送到远程仓库以覆盖历史记录:
1
2bashgit push origin --force --all
git push origin --force --tags
方法 2:使用 git filter-branch
(较旧,不推荐)
git filter-branch
是 Git 的旧工具,效率较低,但仍然可以使用。
步骤:
备份当前仓库 和方法 1 一样,先备份仓库:
1
cp -r your-repo your-repo-backup
清除大文件夹 假设你要清除名为
large-folder
的文件夹:1
2
3git filter-branch --force --index-filter \
"git rm -r --cached --ignore-unmatch large-folder" \
--prune-empty --tag-name-filter cat -- --allgit rm -r --cached
删除索引中的文件夹。--prune-empty
删除空的提交。
强制推送到远程仓库 清理完成后,强制推送到远程仓库:
1
2git push origin --force --all
git push origin --force --tags
方法 3:使用 BFG Repo-Cleaner
BFG 是一个专门用于清理 Git 仓库的工具,操作简单且高效。
步骤:
下载 BFG 从 BFG Repo-Cleaner 官方页面 下载工具。
清除大文件夹 假设你要清除名为
large-folder
的文件夹:1
java -jar bfg.jar --delete-folders "large-folder" your-repo.git
清理历史记录 运行以下命令清理历史记录:
1
git reflog expire --expire=now --all && git gc --prune=now --aggressive
强制推送到远程仓库
1
2bashgit push origin --force --all
git push origin --force --tags
该封面图片由Bassel Zaki在Pixabay上发布
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 James的成长之路!
评论