在过去几天阅读之后,我了解了大多数gitattributes
选项。但是,gitattributes to solve all your problems GitHub gist(GistHub?)中有一种配置类型,我无法理解。第3组属性中的几行具有类似
*.vb -text=auto
我自己理解这一行的大部分内容,但我不知道这意味着什么。 *.vb
表示"将此设置用于.vb
扩展名为"的文件。同时,对于扩展名为-text
"的文件,text
表示"取消设置.vb
属性,或将其设置为false。并且=auto
表示"将属性-text
设置为auto
扩展名为"的文件的值.vb
。
这就是我的困惑所在:你如何在设置它的同时解开某些东西?如何同时将某些内容设置为两个值(此处为false
和auto
)?这是一种秘密的忍者方法来增强你的gitattributes
吗?
答案 0 :(得分:1)
这是实际解析属性行的git源代码:
if (*cp == '-' || *cp == '!') {
e->setto = (*cp == '-') ? ATTR__FALSE : ATTR__UNSET;
cp++;
len--;
}
else if (!equals)
e->setto = ATTR__TRUE;
else {
e->setto = xmemdupz(equals + 1, ep - equals - 1);
}
e->attr = git_attr_internal(cp, len);
(来自git 2.1.0中的attr.c
)。在这种情况下,*cp
是属性开头的字符,例如-
中的-text
或t
中的text
; equals
是=
字符的位置(如果有的话); e
是正在设置的内部数据结构。
这意味着:
-text=anything
“表示”与普通-text
相同,因为*cp
上的测试发生在=
的测试之前(然后完全排除)。同样,!text=foo
只是“意味着”!text
:=
之后的所有内容都会被忽略。
依赖于这种行为似乎是不明智的,并且git可能会发出警告。但答案是(显然)这只是-text
。