在 Git 中清除历史记录中的大文件夹或大文件,可以通过以下步骤实现。这通常需要使用 git filter-repogit filter-branch 工具。以下是推荐的方式:


方法 1:使用 git filter-repo(推荐)

git filter-repo 是一个更现代、更高效的工具,适合清理历史记录。

步骤:

  1. 安装 git filter-repo 如果尚未安装,可以通过以下方式安装:

    1
    pip install git-filter-repo  
  2. 备份当前仓库 在操作之前,建议备份当前仓库,以防误操作导致数据丢失:

    1
    cp -r your-repo your-repo-backup  
  3. 清除大文件夹 假设你要清除名为 large-folder 的文件夹:

    1
    git filter-repo --path large-folder --invert-paths  
    • --path 指定要操作的路径。
    • --invert-paths 表示删除指定路径的内容。
  4. 强制推送到远程仓库 清理完成后,需要强制推送到远程仓库以覆盖历史记录:

    1
    2
    bashgit push origin --force --all  
    git push origin --force --tags

方法 2:使用 git filter-branch(较旧,不推荐)

git filter-branch 是 Git 的旧工具,效率较低,但仍然可以使用。

步骤:

  1. 备份当前仓库 和方法 1 一样,先备份仓库:

    1
    cp -r your-repo your-repo-backup  
  2. 清除大文件夹 假设你要清除名为 large-folder 的文件夹:

    1
    2
    3
    git filter-branch --force --index-filter \
    "git rm -r --cached --ignore-unmatch large-folder" \
    --prune-empty --tag-name-filter cat -- --all
    • git rm -r --cached 删除索引中的文件夹。
    • --prune-empty 删除空的提交。
  3. 强制推送到远程仓库 清理完成后,强制推送到远程仓库:

    1
    2
    git push origin --force --all  
    git push origin --force --tags

方法 3:使用 BFG Repo-Cleaner

BFG 是一个专门用于清理 Git 仓库的工具,操作简单且高效。

步骤:

  1. 下载 BFGBFG Repo-Cleaner 官方页面 下载工具。

  2. 清除大文件夹 假设你要清除名为 large-folder 的文件夹:

    1
    java -jar bfg.jar --delete-folders "large-folder" your-repo.git  
  3. 清理历史记录 运行以下命令清理历史记录:

    1
    git reflog expire --expire=now --all && git gc --prune=now --aggressive  
  4. 强制推送到远程仓库

    1
    2
    bashgit push origin --force --all  
    git push origin --force --tags

该封面图片由Bassel ZakiPixabay上发布