[英]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 在內部影響兩個函數f1
和f2
。 Git對“如何標記這個”的回答是從整個文本上方開始,向后搜索一些正則表達式。 如果它匹配f0
,那就是差異上的標簽。
(旁注:內置的正則表達式工作得很好,但不能識別所有語言中所有可能的合法函數定義。更改顯示的上下文數量應該對這個特定示例有所幫助,盡管您必須將其縮小到最多1 行。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.