如何从git历史记录中删除许多相同格式的文件

问题描述

我需要从 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")
  '

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...