问题描述
我需要从 git 历史记录中删除许多文档文件,例如 *.html 文件
这些经过多年开发的 HTML 文件导致 git repo 膨胀。现在很难每次都检查 10 多 GB。
我能够使用互联网上的脚本找出导致这种膨胀的原因是哪些文件格式,例如
OpenSSH_for_Windows_8.1p1,LibreSSL 3.0.2
使用 grep 分离文档文件格式。我走到了死胡同。
解决方法
您可以使用第三方工具 git filter-repo
(需要 python),带有 callbacks
特别是文件名回调。
- 返回
None
意味着应该从所有提交中删除该文件, - 返回未修改的文件名标记要保留的文件,并且
- 返回不同的名称意味着应该重命名文件。
示例:
git-filter-repo --filename-callback '
if b"/src/" in filename:
# Remove all files with a directory named "src" in their path
# (except when "src" appears at the toplevel).
return None
elif filename.startswith(b"tools/"):
# Rename tools/ -> scripts/misc/
return b"scripts/misc/" + filename[6:]
else:
# Keep the filename and do not rename it
return filename
'
如果您需要查看这些文件的内容(例如,gnumfmt
),则需要一个 bob 回调:
git filter-repo --blob-callback '
if len(blob.data) > 25:
# Mark this blob for removal from all commits
blob.skip()
else:
blob.data = blob.data.replace(b"Hello",b"Goodbye")
'