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

How to list all distinct extensions of tracked files in a git repository?

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

预期输出示例:

bat
gitignore
gradle
html
jar
java
js
json
md
png
properties
py
svg
webp
xml
yml

我可以使用什么命令?

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

声明为别名时,必须转义</code>:</p> <pre><code>alias gitFileExtensions="git ls-tree -r HEAD --name-only | perl -ne 'print $1 if m/\.([^.\/]+)$/' | sort -u"

这比天真更好find,因为:

  • 它排除了未跟踪的(gitignored)文件
  • 它排除了通常包含 hundreds/thousands 个文件的 .git 目录,因此会减慢搜索速度

(灵感来自 How can I find all of the distinct file extensions in a folder hierarchy?