git-rm-git-从存储库中删除所有特定类型的文件



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

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

要么git没有扩展globs,要么它没有按照我预期的方式扩展**

您只需运行此操作即可从索引中删除所有jar:

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

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

对于Git 2.24(2019年第4季度(,git filter-branch已被弃用

等效的是,使用newren/git-filter-repo及其示例部分:

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

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

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

项目页面上的说明很清楚。您将使用的命令类似于:

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

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

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

应该可以,但这有点傻,因为git globs(*(匹配路径分隔符。因此,**/*.jar等价于*.jar

这也意味着*/a*.jardir1/abc/dir2/log4j.jar相匹配。如果您想匹配类似**/a*.jar的东西(任何目录中名称以a开头的所有jar(,您应该使用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")'

参考文献:git help glossarypathspec部分。

虽然这不是一个git命令,但对于那些对如何在linux机器上实现这一点感兴趣的人来说,您可以使用

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

在这里,我们列出git索引中的所有文件,并将输出转发到grep命令,以仅过滤.sh文件,然后对每个文件执行git rm --cached <file>

最新更新