git - 如何从 GitHub 存储库中清除分布在许多分支和提交中的 Java 工件?

标签 git github

回到过去,我不小心将大量 Java 工件(.war、.jar 和 .class)提交到我的 GitHub 存储库中。这导致大小膨胀到大约 100Mb。直到后来许多提交和分支 merge 我才注意到。

幸运的是,有很多关于此的信息,因此在通过 StackOverflow、GitHub 和 Git 文档无休止地搜索之后(谢谢大家!)我终于设法将以下脚本放在一起:

#!/bin/bash          
echo "Removing history for *.war, *.jar, *.class files"

echo "Starting size"
git count-objects -v

echo "Removing history for *.war, *.jar, *.class files"
git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch *.war' --prune-empty --tag-name-filter cat -- --all
git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch *.jar' --prune-empty --tag-name-filter cat -- --all
git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch *.class' --prune-empty --tag-name-filter cat -- --all

echo "Purging refs and garbage collection"
# Purge the backups 
rm -Rf .git/refs/original

# Force reflog to expire now (not in the default 30 days)
git reflog expire --expire=now --all

# Prune
git gc --prune=now

# Aggressive garbage collection
git gc --aggressive --prune=now

echo 
echo "Ending size (size-pack shows new size in Kb)"
git count-objects -v

# Can't do this in the script - it needs a human to be sure
echo
echo "Now use this command to force the changes into your remote repo (origin)"
echo 
echo git push --all origin --force

这在本地完美运行,我的 100Mb 存储库下降到大约 2Mb。然后我用了

git push --all origin --force

命令用我的本地更改覆盖 GitHub 存储库中的所有分支。一切顺利。为了检查所有内容,我删除了本地存储库并从 GitHub 克隆。这应该是 2Mb,但又是 100Mb。

那么,说了那么多之后,我到底哪里做错了?我如何强制 GitHub 使用我的本地存储库及其已清除的历史记录?

编辑以获取更多信息

GitHub 存储库无法删除,因为它有很多附加信息(问题、wiki、监视等)。针对空的临时存储库执行此脚本工作正常 - 克隆的存储库为 2Mb。

问题仍然是为什么它不适用于主仓库。

最佳答案

都是因为 fork

事实证明,如果有人在 GitHub 上 fork 了您的存储库,那么他们会保留其中条目的链接和引用。因此,除非持有 fork 的每个人也在他们的 repo 上运行脚本,否则您的清除将不会起作用。

关于git - 如何从 GitHub 存储库中清除分布在许多分支和提交中的 Java 工件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12873063/

相关文章:

git - 如何在github上更新一个fork

java - 我无法在 Jenkins 中构建工作,,,即使我已经给出了 github 的路径

git - 在 GitHub 中编辑 git commit 消息

github - Jenkins 拉取请求生成器

search - 如何在 GitHub 上搜索提交消息?

git - 在没有 SSH 访问的情况下在防火墙后使用 GitHub

ruby - 检查GitLab API访问: FAILED.代码:404

git - 将 big bzr 存储库转换为 git,会发生什么?

git 将子模块添加到现有目录

git - 将功能分支推送到远程存储库以与不同步的 master merge