簡體   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