Как перечислить все различные расширения отслеживаемых файлов в репозитории git?

Я хотел бы знать все различные расширения файлов, отслеживаемых Git в данном репо, чтобы создать соответствующие .gitattributes файл.

Ожидаемый пример вывода:

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

Какую команду я могу использовать для этого?

2 ответа

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

Когда вы объявляете его как псевдоним, вы должны бежать $1:

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

Это лучше чем наивный find, так как:

  • исключает неотслеживаемые (gitignored) файлы
  • это исключает .git каталог, который обычно содержит сотни / тысячи файлов и, следовательно, замедляет поиск

(вдохновленный Как я могу найти все различные расширения файлов в иерархии папок?)

Если у вас есть доступ к PowerShell, вот хороший однострочный код, который также дает вам подсчет количества существующих файлов каждого типа:

      $ext = @{}; git ls-tree -r HEAD --name-only | Get-Item | %{ $ext[$_.Extension]++ }; $ext
Другие вопросы по тегам