繁体   English   中英

Git Diff为cpp文件定义了不正确的大块头

[英]Git Diff defining incorrect hunk header for cpp file

我正在使用 git diff 找出哪些方法发生了变化。 显然,它错误地定义了大块头(如下所示),因此我无法找到获取已更改方法列表的方法。


    @@ -22,7 +22,7 @@ void func2(){
     
     void func1(){
         cout<<"Function 1"<<endl;
    -    int i=1000;
    +    int i=100;
         while(i>0){
             func2();
             i--;

这里的变化是在 func1() 中,但大块头在 func2() 中。 我尝试更改一些测试函数,结果它总是选择所需函数上方的行/函数作为大块头。

我尝试在根目录中创建一个.gitattributes文件并放置*.cpp diff=cpp以便为 diff 启用 cpp,不幸的是这并没有解决问题。

这里的问题是,这种差异功能func2

请注意,差异以空行开头,后跟函数func1的定义。 这个定义在 diff-hunk 中,所以 diff-hunk函数之前开始。 据推测,在空行上方,我们会找到更多func2的代码。 这就是git diff告诉您的上下文: git diff之前的内容。

我们可以(!而合理地)认为,DIFF唯一的变化是函数中func2 ,但后来应该是什么混帐做一个diff大块读取,例如:

 T f1() {
+    new_call();
     return somevalue;
 }
 T f2() {
-    old_call();
     return somevalue;
 }

在这里, diff 在内部影响两个函数f1f2 Git对“如何标记这个”的回答是从整个文本上方开始,向后搜索一些正则表达式。 如果它匹配f0 ,那就是差异上的标签。

(旁注:内置的正则表达式工作得很好,但不能识别所有语言中所有可能的合法函数定义。更改显示的上下文数量应该对这个特定示例有所帮助,尽管您必须将其缩小到最多1 行。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM