2

我有需要从 git 历史记录中删除许多文档文件的情况,例如 *.html 文件

这些 HTML 文件经过多年的开发,导致 git repo 变得臃肿。现在每次都很难检查 10 多个 GB。

我能够使用在互联网上找到的脚本找出哪些文件格式是导致这种膨胀的原因,例如

git rev-list --objects --all |
  git cat-file --batch-check='%(objecttype) %(objectname) %(objectsize) %(rest)' |
  sed -n 's/^blob //p' |
  sort --numeric-sort --key=2 |
  cut -c 1-12,41- |
  $(command -v gnumfmt || echo numfmt) --field=2 --to=iec-i --suffix=B --padding=7 --round=nearest**

使用 grep 分离文档文件格式。我走到了死胡同。

4

1 回答 1

0

您可以使用带有回调的第三方工具git filter-repo(需要 python)

具体来说,文件名回调。

  • 返回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")
  '
于 2021-07-27T07:18:07.920 回答