我希望知道在给定的仓库中,git跟踪的所有文件扩展名,并创建适当的.gitattributes文件。
期望输出示例:
bat
gitignore
gradle
html
jar
java
js
json
md
png
properties
py
svg
webp
xml
yml
我可以使用什么命令来实现这个功能?
我希望知道在给定的仓库中,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 $1 if m/\.([^.\/]+)$/' | sort -u
当你将其声明为别名时,必须转义$1
:
alias gitFileExtensions="git ls-tree -r HEAD --name-only | perl -ne 'print \$1 if m/\.([^.\/]+)$/' | sort -u"
这比朴素的find
更好,因为:
.git
目录如果您可以访问PowerShell,这里有一个不错的一行代码,它还会告诉您每种文件类型存在多少个:
$ext = @{}; git ls-tree -r HEAD --name-only | Get-Item | %{ $ext[$_.Extension]++ }; $ext
&& !$a{$1}++
(整个命令用单引号括起来)只打印每个结果的第一次出现。 - Tom FenechSCALAR(0xa031e3c)SCALAR(0xa031e3c)...
。为了让它正常工作,我必须在$1
前面删除转义。但是当我声明别名时,我必须再次添加转义。已更新。 - jakub.g$
。在我看来最好只使用一个函数。 - Tom Fenech!$a{$1}++
我在一个巨大的 Git 存储库(Chrome 的 Blink)上进行了测试,实际上速度差异微不足道(在我的机器上为 0.8 秒 vs 1.0 秒)。我认为我会保留sort
以提高可读性 :) - jakub.g