近期,我克隆了一个SVN代码库,其中包含一些不再需要的二进制文件。遗憾的是,我已经将其带有这些二进制文件的版本推送到了Github。现在,我想使用'git filter-branch'移除这些文件,但是在处理标签和分支时遇到了一些问题。
基本上,我创建了一个简单的shell脚本来删除由以下命令确定的文件列表:
我有一些标签(全部列在.git/packed-refs中),其中一个是.git/refs/remotes/origin(指向Github repo)。使用上述脚本删除文件没有想要的效果('du -cm'仍然输出相同的大小;'git rev-list'仍然列出这些文件),直到我手动从.git/packed-refs和.git/refs/remotes/origin目录中删除所有引用。
当然,这种方法会丢失所有标签以及将本地更改推回Github的可能性。是否有我忽略的内容或者有其他方法可以删除所有分支/标签中的文件而不破坏我的历史记录呢?
非常感谢, Matthes
基本上,我创建了一个简单的shell脚本来删除由以下命令确定的文件列表:
git rev-list --objects --all | grep .jar > files.txt
删除脚本如下:
#!/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
我有一些标签(全部列在.git/packed-refs中),其中一个是.git/refs/remotes/origin(指向Github repo)。使用上述脚本删除文件没有想要的效果('du -cm'仍然输出相同的大小;'git rev-list'仍然列出这些文件),直到我手动从.git/packed-refs和.git/refs/remotes/origin目录中删除所有引用。
当然,这种方法会丢失所有标签以及将本地更改推回Github的可能性。是否有我忽略的内容或者有其他方法可以删除所有分支/标签中的文件而不破坏我的历史记录呢?
非常感谢, Matthes