列出所有具有git属性集的文件

时间:2015-04-17 08:51:50

标签: git gitattributes

git check-attr允许我检查是否在.gitattributes中为特定文件集设置了属性。 e.g:

# git check-attr myAttr -- org/example/file1 org/example/file2
org/example/file1: myAttr: set
org/example/file2: myAttr: unspecified

是否有一种简单的方法可以列出所有设置了myAttr的文件,包括所有通配符匹配?

2 个答案:

答案 0 :(得分:2)

其他帖子对我来说效果不佳,但我到了那里:

git ls-files | git check-attr -a --stdin

“检查git中的每个文件并打印所有过滤器”一行。

答案 1 :(得分:1)

如果您只想获取文件列表,并使用NUL字符对包含\n:的文件名或属性具有弹性,则可以执行以下操作:

对于具有“merge = union”属性的文件列表:

git ls-files -z | git check-attr --stdin -z merge | sed -z -n -f script.sed

使用script.sed:

             # read filename
x            # save filename in temporary space
n            # read attribute name and discard it
n            # read attribute name
s/^union$//  # check if the value of the attribute match
t print      # in that case goto print
b            # otherwise goto the end
:print
x            # restore filename from temporary space
p            # print filename
             # start again

内联的sed脚本也是如此(即使用-e代替-f,忽略评论并用分号替换换行符:

git ls-tree -z | git check-attr --stdin -z merge | sed -zne 'x;n;n;s/^union$//;t print;b;:print;x;p'

PS:结果使用NUL字符分隔文件名,使用| xargs --null printf "%s\n"以便以人类可读的方式打印它们。