1

gitattributes在过去几天阅读它们之后,我了解大多数选项。然而,在gitattributes 中有一种配置类型可以解决你所有的问题GitHub gist (GistHub?) 我不太明白。第三组属性中的几行类似于

*.vb -text=auto

我自己理解这条线的大部分部分,但在一起我不确定这意味着什么。意思是“*.vb将此设置用于具有.vb扩展名的文件”。同时,-text表示“为带有扩展名的文件取消设置text属性,或将其设置为false .vb”和表示“为带有扩展名的文件=auto设置属性-text值”。auto.vb

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

4

1 回答 1

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);

(来自attr.cgit 2.1.0)。在这种情况下,*cp是属性开头的字符,例如-in-texttin textequals=角色的位置,如果有的话;并且e是正在建立的内部数据结构。

这意味着:

-text=anything

“意味着”与 plain 相同的东西-text,因为测试 on*cp发生在(然后完全排除)测试之前=。同样,!text=foo只是“手段” !text:风起云涌之后的一切都被=悄悄地忽略了。

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

于 2014-09-09T03:51:31.397 回答