微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Git Diff为cpp文件定义了错误的块头

如何解决Git Diff为cpp文件定义了错误的块头

我正在使用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以便为差异启用cpp,很遗憾,这不能解决问题。

解决方法

这里的问题是此差异在函数func2中。

请注意,差异以空行开头,后跟函数func1的定义。此定义位于diff-hunk内部,因此diff-hunk在函数之前 开始。大概在空白行上方,我们将找到更多func2的代码。这就是git diff告诉您的上下文:差异出现在之前

一个人可以(相当合理!)认为diff内的唯一变化是在函数func2中,但是Git应该如何处理读取的diff块,例如: / p>

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。