我提交了id 56f06019(例如).在那个提交中,我不小心提交了大文件(50Mb).在另一个提交中,我添加相同的文件,但大小合适(小).现在我克隆的回购太重了:(如何从回购历史中删除那个大文件以减少我的回购的大小?
你能提供一个(全部或最常见的)操作或命令列表,这些操作或命令会危害git中的历史记录吗?
什么应该绝对避免?
git commit/ git push/ git commit --amend)我希望这个问题(如果它还没有在其他地方之前提出过)成为关于git上常见的可避免操作的某种参考.
此外,我使用git reset了很多,但我还没有完全意识到我可以对存储库(或其他贡献者副本)造成的损害.可能git reset有危险吗?
我最近克隆了一个SVN存储库,它曾经有一些二进制文件,不再需要它们了.不幸的是,我已经把它推到了Github,其中包含了二进制文件.我现在想要使用'git filter-branch'删除它们,但是当涉及到标签和分支时我遇到了一些问题.
基本上,我创建了一个简单的shell脚本来删除已由以下命令确定的文件列表:
git rev-list --objects --all | grep .jar > files.txt
Run Code Online (Sandbox Code Playgroud)
删除脚本如下所示:
#!/bin/sh
while read file_hash file_to_remove
do
echo "Removing "$file_to_remove;
git filter-branch --index-filter "git rm --cached --ignore-unmatch $file_to_remove"
rm -rf .git/refs/original/;
git reflog expire --all --expire-unreachable=0;
git repack -A -d;
git prune
done < $1
Run Code Online (Sandbox Code Playgroud)
我有一些标签(全部列在.git/packed-refs中),一个.git/refs/remotes/origin(指向Github repo).使用上面的脚本删除文件没有想要的效果('du -cm'仍然输出相同的大小;'git rev-list'仍然列出文件),直到我手动删除.git/packed中的所有引用-refs和.git/refs/remotes/origin目录.
当然,我正在丢失所有标签以及使用这种方法将我的本地更改推回给Github的可能性.有什么我错过了或有没有其他方法从所有分支/标签中删除文件而不破坏我的历史记录?
非常感谢,Matthes