如何列出 git 存储库中跟踪文件的所有不同扩展名?

jak*_*b.g 6 git bash grep gitattributes

我想知道git 在给定存储库中跟踪的文件的所有不同扩展名,以便创建适当的.gitattributes文件。

预期输出示例:

bat
gitignore
gradle
html
jar
java
js
json
md
png
properties
py
svg
webp
xml
yml
Run Code Online (Sandbox Code Playgroud)

我可以使用什么命令来实现这一点?

jak*_*b.g 9

git ls-tree -r HEAD --name-only | perl -ne 'print $1 if m/\.([^.\/]+)$/' | sort -u 
Run Code Online (Sandbox Code Playgroud)

当您将其声明为别名时,您必须转义$1

alias gitFileExtensions="git ls-tree -r HEAD --name-only | perl -ne 'print \$1 if m/\.([^.\/]+)$/' | sort -u"
Run Code Online (Sandbox Code Playgroud)

这比 naive 更好find,因为:

  • 它排除未跟踪(gitignored)的文件
  • 它排除.git通常包含数百/数千个文件的目录,从而减慢搜索速度

(灵感来自如何在文件夹层次结构中找到所有不同的文件扩展名?