Linux 自定义git diff输出格式(区块头中我的文件的自有函数名)

Linux 自定义git diff输出格式(区块头中我的文件的自有函数名),linux,git,github,Linux,Git,Github,我在Linux/x86-64/Debian/Sid上使用Git2.14.1。我没有任何带有GIT的shell环境变量。我读了这一页。下面是我当前项目(在github上)的git config-l的输出: 当我在一些C文件上执行git diff时,比如main\u BM.C我得到的输出如下 diff --git a/main_BM.c b/main_BM.c index 3639a52..9c43d9e 100644 --- a/main_BM.c +++ b/main_BM.c @@ -371,

我在Linux/x86-64/Debian/Sid上使用Git2.14.1。我没有任何带有
GIT
的shell环境变量。我读了这一页。下面是我当前项目(在github上)的git config-l的输出:

当我在一些C文件上执行
git diff
时,比如
main\u BM.C
我得到的输出如下

diff --git a/main_BM.c b/main_BM.c
index 3639a52..9c43d9e 100644
--- a/main_BM.c
+++ b/main_BM.c
@@ -371,6 +371,7 @@ rungui_BM (void)
     }
   if (gui_command_log_file_BM)
     {
+      /// the current time
       {
         time_t nowtim = time (NULL);
         struct tm nowtm = { };
注意块头行
@-371,6+371,7@@rungui_BM(void)
;它显示了一个函数名(例如,
rungui\u BM
),我不明白为什么会这样(但我喜欢这样)

我还有几个
.bismon
文本文件(由机器生成,但版本在git下,可以被认为是一些简单的领域特定语言)。例如,我的文件包含如下内容

!(_0277f6mOd9j_0tVZSXnTzUK |=basiclo_temporary_module|
!~ name (~ basiclo_temporary_module
~)
!@ 1504862208.05
!$_0LK4TzFd6u1_0JFUsrQ4odG |=class|
!: _01h86SAfOfg_1q2oMegGRwW |=comment|
 "class of temporary modules containing only functions for closures"
!~ class (~ |supercl plain_temporary_module:| _1oEp0eAAyFN_4lsobepyr1T
~)

!)_0277f6mOd9j_0tVZSXnTzUK
(我的
store*.bismon
有自己的格式——我定义了这种格式,如果方便的话可以稍加修改——基本上表示某个解释器的持久内存堆转储)

git diff
的角度来看,我希望任何类似于
!(_0277f6mOd9j_0tVZSXnTzUK |=基本的临时模块|
(即任何以
!(11个字母数字字符后接
后接11个字母数字字符)开头的行被
git diff
视为一个函数开始,并在
@
块头中由
git diff
显示

当前,
git diff store2.bismon
没有提供我想要的好的块头:

diff --git a/store2.bismon b/store2.bismon
index edbb2f7..3847b6b 100644
--- a/store2.bismon
+++ b/store2.bismon
@@ -6,7 +6,13 @@
 !(_0277f6mOd9j_0tVZSXnTzUK |=basiclo_temporary_module|
 !~ name (~ basiclo_temporary_module
 ~)
-!@ 1504861742.79
+!@ 1504862208.05
+!$_0LK4TzFd6u1_0JFUsrQ4odG |=class|
+!: _01h86SAfOfg_1q2oMegGRwW |=comment|
+ "class of temporary modules containing only functions for closures"
+!~ class (~ |supercl plain_temporary_module:| _1oEp0eAAyFN_4lsobepyr1T
+~)
+
 !)_0277f6mOd9j_0tVZSXnTzUK
我希望块标题行
@-6,7+6,13@
类似于:

 @@ -6,7 +6,13 @@ !(_0277f6mOd9j_0tVZSXnTzUK |=basiclo_temporary_module|
也许我需要将一些
GIT\u EXTERNAL\u DIFF
设置为一些脚本。但是如何调用这个东西,以及由
GIT
的哪个子部分调用

如果可能,我希望git diff使用的颜色保持不变。

解决方案是:

您可以调整regexp以获得更高的精度

 @@ -6,7 +6,13 @@ !(_0277f6mOd9j_0tVZSXnTzUK |=basiclo_temporary_module|
echo '*.bismon diff=bismon' > .gitattributes
git config diff.bismon.xfuncname '^!\(_.*$'