Git - 从存储库中删除所有类型的文件

时间:2016-08-10 17:56:57

标签: git git-rm

如何从存储库中删除所有类型的文件?我正在使用

git filter-branch --index-filter 'git rm -rf --cached **/*.jar'

git不是在扩展globs,也不是以我期待的方式扩展**

5 个答案:

答案 0 :(得分:11)

你只需要运行它就可以从索引中删除所有的jar:

git rm -r --cached **/*.jar

从项目的根目录运行此命令,它将清理并仅从暂存区域删除所有文件。

答案 1 :(得分:4)

git filter-branch --index-filter 'git rm -rf --cached **/*.jar'

应该可行,但它有点傻,因为git globs(*)匹配路径分隔符。因此,**/*.jar相当于*.jar

这也意味着*/a*.jar匹配dir1/abc/dir2/log4j.jar。如果你想匹配**/a*.jar(名称以a开头的所有罐子在任何目录中),你应该使用find。这是一个命令,用于删除名称以ab开头的任何jar,以及dir1/dir2中的任何jar,以及任何目录中的任何.txt文件:

git filter-branch --index-filter 'git rm -rf --cached "*.txt" "dir1/dir2/*.jar" $(find -type f -name "a*.jar" -o -name "b*.jar")'

参考文献:pathspec的{​​{1}}部分。

答案 2 :(得分:4)

我发现最简单的方法是使用BFG Repo-Cleaner

项目页面上的说明是清楚的。您将使用的命令如下:

bfg --delete-files "*.jar"  my-repo.git

BFG将清除以.jar扩展名结尾的所有文件的repo的历史记录。然后,您可以在将结果推回服务器之前检查结果。

答案 3 :(得分:1)

虽然它不是git命令,但对于那些对如何在linux机器上完成它感兴趣的人,你可以使用

git ls-files | grep "\.sh$" | { while IFS= read -r line; do git rm --cached "$line"; done }

这里我们列出git index中的所有文件,并将该输出转发给grep命令,以仅过滤.sh个文件,而不是我们执行的每个文件git rm --cached <file>

答案 4 :(得分:1)

使用Git 2.24(2019年第四季度),git filter-branch is deprecated

相当于使用newren/git-filter-repo及其example section

cd repo
git filter-repo --path-glob '*.jar' --invert-paths

这将从存储库历史记录中删除所有jar文件。