We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
笔记来源:https://www.darlang.com/2021/10/jiyicishanchugitjiluzhongdedawenjiandeguocheng/
使用以下命令可以查看占用空间最多的五个文件:
git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -5 | awk '{print$1}')" rev-list 命令用来列出 Git 仓库中的提交,我们用它来列出所有提交中涉及的文件名及其 ID。 该命令可以指定只显示某个引用(或分支)的上下游的提交。
git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -5 | awk '{print$1}')" rev-list
--objects:列出该提交涉及的所有文件 ID。
--all:所有分支的提交,相当于指定了位于 /refs 下的所有引用。
verify-pack 命令用于显示已打包的内容。
查询结果示例:
100644 blob 266fa1f45993b2ff569d237c15603b78bb5b4516 97895533 "release/2.2.9/app-Vmeng-release_2.2.9.rar" 100644 blob b3ebda491802e3feadf005bdff51edabf4d544b0 43542403 release/2.3.0/app-vm_2.3.0.zip 100644 blob 1ebe17f16596223a88e28cb1c4a531a48b1f94ba 45720176 release/2.2.9/app-Vmeng-release_2.2.9.apk 100644 blob 09ec712df308727d08ba55489cb678ab97628fcc 44637304 release/2.3.0/app-vm_2.3.0.apk 100644 blob 79aaf28894e878007e814a5c38309cef64f37904 44614399 release/2.2.8/app-Vmeng-release_2.2.8.apk
使用以下命令,删除历史提交过的大文件:
git filter-branch --force --index-filter 'git rm -rf --cached --ignore-unmatch big-file.jar' --prune-empty --tag-name-filter cat -- --all 上面脚本中的 big-file.jar 请换成你第一步查出的大文件名,需要带齐目录,或者这里直接写一个目录。
git filter-branch --force --index-filter 'git rm -rf --cached --ignore-unmatch big-file.jar' --prune-empty --tag-name-filter cat -- --all
filter-branch 命令可以用来重写 Git 仓库中的提交
--index-filter 参数用来指定一条 Bash 命令,然后 Git 会检出(checkout)所有的提交, 执行该命令,然后重新提交。
–all 参数表示我们需要重写所有分支(或引用)。
示例:
删除某文件【❗️❗️❗️一定要带路径】
git filter-branch --force --index-filter 'git rm -rf --cached --ignore-unmatch release/2.2.9/app-Vmeng-release_2.2.9.rar' --prune-empty --tag-name-filter cat -- --all 删除某目录
git filter-branch --force --index-filter 'git rm -rf --cached --ignore-unmatch release/2.2.9/app-Vmeng-release_2.2.9.rar' --prune-empty --tag-name-filter cat -- --all
git filter-branch --force --index-filter 'git rm -rf --cached --ignore-unmatch release/2.3.0/' --prune-empty --tag-name-filter cat -- --all 在重写提交的过程中,会有以下日志输出:
git filter-branch --force --index-filter 'git rm -rf --cached --ignore-unmatch release/2.3.0/' --prune-empty --tag-name-filter cat -- --all
Rewrite 6cdbb293d453ced07e6a07e0aa6e580e6a5538f4 (266/266) # Ref 'refs/heads/master' was rewritten
如果显示 xxxxx unchanged, 说明 repo 里没有找到该文件,请检查路径和文件名是否正确,重复上面的脚本,把所有你想删除的文件都删掉。
以强制覆盖的方式推送你的 repo, 命令如下:
git push origin master --force 涉及多个分支,需要一一对应的提交一次
git push origin master --force
step 4. 清理和回收空间 虽然上面我们已经删除了文件,但是我们的 repo 里面仍然保留了这些 objects, 等待垃圾回收 (GC), 所以我们要用命令彻底清除它,并收回空间,命令如下:
rm -rf .git/refs/original/ git reflog expire --expire=now --all git gc --prune=now
The text was updated successfully, but these errors were encountered:
No branches or pull requests
笔记来源:https://www.darlang.com/2021/10/jiyicishanchugitjiluzhongdedawenjiandeguocheng/
Step 1 查看哪些历史提交过文件占用空间较大
使用以下命令可以查看占用空间最多的五个文件:
git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -5 | awk '{print$1}')" rev-list
命令用来列出 Git 仓库中的提交,我们用它来列出所有提交中涉及的文件名及其 ID。 该命令可以指定只显示某个引用(或分支)的上下游的提交。--objects:列出该提交涉及的所有文件 ID。
--all:所有分支的提交,相当于指定了位于 /refs 下的所有引用。
verify-pack 命令用于显示已打包的内容。
查询结果示例:
step 2. 重写 commit,删除大文件
使用以下命令,删除历史提交过的大文件:
git filter-branch --force --index-filter 'git rm -rf --cached --ignore-unmatch big-file.jar' --prune-empty --tag-name-filter cat -- --all
上面脚本中的 big-file.jar 请换成你第一步查出的大文件名,需要带齐目录,或者这里直接写一个目录。
filter-branch 命令可以用来重写 Git 仓库中的提交
--index-filter 参数用来指定一条 Bash 命令,然后 Git 会检出(checkout)所有的提交, 执行该命令,然后重新提交。
–all 参数表示我们需要重写所有分支(或引用)。
示例:
删除某文件【❗️❗️❗️一定要带路径】
git filter-branch --force --index-filter 'git rm -rf --cached --ignore-unmatch release/2.2.9/app-Vmeng-release_2.2.9.rar' --prune-empty --tag-name-filter cat -- --all
删除某目录
git filter-branch --force --index-filter 'git rm -rf --cached --ignore-unmatch release/2.3.0/' --prune-empty --tag-name-filter cat -- --all
在重写提交的过程中,会有以下日志输出:
如果显示 xxxxx unchanged, 说明 repo 里没有找到该文件,请检查路径和文件名是否正确,重复上面的脚本,把所有你想删除的文件都删掉。
step 3. 推送修改后的 repo
以强制覆盖的方式推送你的 repo, 命令如下:
git push origin master --force
涉及多个分支,需要一一对应的提交一次
step 4. 清理和回收空间
虽然上面我们已经删除了文件,但是我们的 repo 里面仍然保留了这些 objects, 等待垃圾回收 (GC), 所以我们要用命令彻底清除它,并收回空间,命令如下:
The text was updated successfully, but these errors were encountered: