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
的文件,包括所有通配符匹配?
答案 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"
以便以人类可读的方式打印它们。