为什么我的.fitconfig文件中的xfuncname不起作用?

时间:2017-02-06 22:23:41

标签: git

我正在尝试为.natvis文件设置一个hunk标头。出于某种原因,它似乎没有起作用。我正在按照here的说明进行操作,这在正则表达式的限制方面没有多说,例如,匹配的项目是否被认为是hunk标题还是我需要一个组?我试过两次都没有成功。这就是我所拥有的:

[diff "natvis"]
    xfuncname = "^[\\\t ]*<Type[\\\t ]+Name=\"([^\"])\".*$"

我还添加到我的.gitattributes文件中(即使我不肯定有必要):

*.natvis diff=natvis

我已尝试\t而不是\\\t,并且只用<Type.*替换整个正则表达式而没有运气。我在git version 2.7.0.windows.1上使用Windows 8.1编辑:我在git version 2.11.1.windows.1上升级为Windows 8.1,甚至在git version 2.8.3 cygwin64上尝试Windows 8.1,结果相同。

作为测试文件,我有以下test.natvis文件:

<?xml version="1.0" encoding="utf-8"?>
<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">

  <Type Name="test">
    <Expand>
      <Item Name="var">var</Item>













      <!-- Non-blank line -->
      <Item Name="added var">added_var</Item>


      <Item Name="var2">var2</Item>
    </Expand>
  </Type>
</AutoVisualizer>

<Item Name="added var">added_var</Item>是添加的新行。

我真的不确定为什么这么难。

编辑:

以下是我得到的示例输出:

$ git diff --word-diff
diff --git a/test.natvis b/test.natvis
index 73c06bc..bc0f549 100644
--- a/test.natvis
+++ b/test.natvis
@@ -18,6 +18,7 @@


      <!-- Non-blank line -->
      {+<Item Name="added var">added_var</Item>+}


      <Item Name="var2">var2</Item>
warning: LF will be replaced by CRLF in test.natvis.
The file will have its original line endings in your working directory.

即使使用xfuncname = "^.*$",我也会期望<!-- Non-blank line -->会显示为我的大头标题,但我什么都没得到。 :(

编辑:

我尝试了torek提出的解决方案,但无济于事。它就像它不知道如何处理xfuncname条目。 :(

2 个答案:

答案 0 :(得分:2)

问题是由于我的混合环境。由于我直接在cygwin和windows下使用git,我有两个正在查看的主目录。 Cygwin和Windows。所以,我在Windows的Cygwin主目录中创建了一个指向.gitconfig的链接。不幸的是,我忘记了也链接了我的.gitattributes文件。

由于这个丢失的文件,它不会使用正确的差异xfuncname

现在已通过创建适当的链接解决了此问题。

答案 1 :(得分:1)

由于以下几个原因,这很困难:

  • regexps起初是非常困难的,
  • Git添加了一层反斜杠解释。

你的正则表达式非常接近。这是适合我的一个:

[diff "natvis"]
        xfuncname = "^[ \\t]*<Type Name=\"([^\"]*)\".*$"

主要变化:

  • 从第一部分中删除一些额外的反斜杠(它们不会导致失败,但可能您不打算允许文字反斜杠以及空格和制表符。)
  • 添加&#34; NAME =&#34;在中间 - 这可以通过允许空格或制表而不仅仅是空格来改进。

我们可以使用POSIX [[:space:]]代替[ \\t],最后的.*$是多余的,因此可以转换为:

xfuncname = "^[[:space:]]*<Type[[:space:]][[:space:]]*Name=\"([^\"]*)\""

更冗长,但避免了棘手的\\t编码。