git查看源文件中某个特定c函数的原型历史

olhwl3o2  于 2023-06-28  发布在  Git
关注(0)|答案(1)|浏览(108)

我试图使用git log查看一个c函数的历史,但该函数是静态的,源代码是用顶部的函数原型块组织的,它们的定义在源代码的下面。
就像这样:

/// @file foo.c

static void foo();

static void foo()
{
    // function body
}

我试图像使用外部函数一样查看历史(原型将在单独的头文件中):

git log -L :foo:foo.c

但是,当我这样做时,它只显示原型的历史。我只对功能的实现感兴趣。有没有一种方法可以查看实际定义的历史记录?
我已经做了一些搜索,并尝试在我的repo的基本目录中设置一个.gitattributes文件,其中包含以下内容:

*.c diff=cpp
*.h diff=cpp
*.f diff=fortran

你知道我还能尝试什么吗?

xxls0lw8

xxls0lw81#

似乎C系列文件中标识函数的规范也与声明相匹配。所以你自己写,你知道你要找什么,所以你可以直接给予出来,

git log -L '/^static void foo()$/,/^}/':foo.c

或者变得可爱,说一些类似的话(经过烟熏测试,所以至少不是完全错误的:)

git log -L '/^\([[:alnum:]_]\+[[:space:]]\)*foo(.*)$/,/^}/':foo.c

相关问题