GitAttributes - [attribute] = [value]:为什么要应用" - "并分配一个值?

时间:2014-09-09 01:20:15

标签: git gitattributes

在过去几天阅读之后,我了解了大多数gitattributes选项。但是,gitattributes to solve all your problems GitHub gist(GistHub?)中有一种配置类型,我无法理解。第3组属性中的几行具有类似

的内容
*.vb -text=auto

我自己理解这一行的大部分内容,但我不知道这意味着什么。 *.vb表示"将此设置用于.vb扩展名为"的文件。同时,对于扩展名为-text"的文件,text表示"取消设置.vb属性,或将其设置为false。并且=auto表示"将属性-text设置为auto扩展名为"的文件的值.vb

这就是我的困惑所在:你如何在设置它的同时解开某些东西?如何同时将某些内容设置为两个值(此处为falseauto)?这是一种秘密的忍者方法来增强你的gitattributes吗?

1 个答案:

答案 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是属性开头的字符,例如-中的-textt中的text; equals=字符的位置(如果有的话); e是正在设置的内部数据结构。

这意味着:

-text=anything

“表示”与普通-text相同,因为*cp上的测试发生在=的测试之前(然后完全排除)。同样,!text=foo只是“意味着”!text=之后的所有内容都会被忽略。

依赖于这种行为似乎是不明智的,并且git可能会发出警告。但答案是(显然)这只是-text