Git - 从存储库中删除所有某种类型的文件
Git - Remove All of a Certain Type of File from the Repository
如何从存储库中删除所有特定类型的文件?我正在使用
git filter-branch --index-filter 'git rm -rf --cached **/*.jar'
要么 git 没有扩展 glob,要么没有按照我期望的方式扩展 **
。
您只需 运行 执行此操作即可从索引中删除所有 jar:
git rm -r --cached **/*.jar
运行 从项目的根目录执行此命令,它将清理并仅从临时区域中删除所有文件。
虽然这不是 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>
.
git filter-branch --index-filter 'git rm -rf --cached **/*.jar'
应该可以,但是有点傻,因为 git globs (*
) 匹配路径分隔符。所以,**/*.jar
等价于 *.jar
.
这也意味着 */a*.jar
匹配 dir1/abc/dir2/log4j.jar
。如果你想匹配类似 **/a*.jar
的东西(任何目录中名称以 a
开头的所有 jar),你应该使用 find。这是一个命令,用于删除名称以 a
或 b
开头的任何 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 glossary
的 pathspec
部分。
我发现的最简单的方法是使用 BFG Repo-Cleaner
项目页面上的说明很清楚。您将使用的命令类似于:
bfg --delete-files "*.jar" my-repo.git
BFG 将清除所有以 .jar 扩展名结尾的文件的回购历史记录。然后您可以在将结果推回服务器之前检查结果。
随着 Git 2.24(2019 年第 4 季度),git filter-branch
is deprecated。
等同于,使用 newren/git-filter-repo
, and its example section:
cd repo
git filter-repo --path-glob '*.jar' --invert-paths
这将从存储库历史记录中删除任何 jar 文件。
如何从存储库中删除所有特定类型的文件?我正在使用
git filter-branch --index-filter 'git rm -rf --cached **/*.jar'
要么 git 没有扩展 glob,要么没有按照我期望的方式扩展 **
。
您只需 运行 执行此操作即可从索引中删除所有 jar:
git rm -r --cached **/*.jar
运行 从项目的根目录执行此命令,它将清理并仅从临时区域中删除所有文件。
虽然这不是 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>
.
git filter-branch --index-filter 'git rm -rf --cached **/*.jar'
应该可以,但是有点傻,因为 git globs (*
) 匹配路径分隔符。所以,**/*.jar
等价于 *.jar
.
这也意味着 */a*.jar
匹配 dir1/abc/dir2/log4j.jar
。如果你想匹配类似 **/a*.jar
的东西(任何目录中名称以 a
开头的所有 jar),你应该使用 find。这是一个命令,用于删除名称以 a
或 b
开头的任何 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 glossary
的 pathspec
部分。
我发现的最简单的方法是使用 BFG Repo-Cleaner
项目页面上的说明很清楚。您将使用的命令类似于:
bfg --delete-files "*.jar" my-repo.git
BFG 将清除所有以 .jar 扩展名结尾的文件的回购历史记录。然后您可以在将结果推回服务器之前检查结果。
随着 Git 2.24(2019 年第 4 季度),git filter-branch
is deprecated。
等同于,使用 newren/git-filter-repo
, and its example section:
cd repo
git filter-repo --path-glob '*.jar' --invert-paths
这将从存储库历史记录中删除任何 jar 文件。