2016-11-04 28 views
0

我正在研究git的交互功能,從中我最重要的是git的合併和選擇。它工作得很好,但我需要胖子更小。在處理源代碼文件時,通常情況下,該大塊包含兩個不相關的更改(通常彼此間隔幾行)。 這可能是因爲git識別給定配置的hunk,比如線條分開,或者chars或者類似的東西。GIT:如何配置hunk的識別

這是正確的,如果是這樣,有什麼方法可以改變/重新配置這種行爲?

非常感謝,

+1

看看http://stackoverflow.com/questions/1122210/can-i-modify-git-adds-hunk-size – pedrorijo91

+0

謝謝pedrorijo91,而不是我在找什麼。 – repara2

回答

2

如果你指的只是普通git diff,在大塊上下文大小是可配置的:它是通過-U選項設置,如果指定,否則從diff.context設置,如果設置。如果所有這些都失敗,默認情況是三行上下文(上下)。

因此:

$ git config --global diff.context 1 

降低了DIFF上下文中的每個方向上的一行,而不是3還有,可以使用融合更大塊在一起(這是相反的--inter-hunk-context選項值你想要什麼,所以我只提及它的完整性;參見diff.interHunkContext,在Git 2.12和更高版本中可用;另見--function-context又名-W)。

然而,git add --interactive運行git diff-filesgit diff-index,而不是普通的git diff,併爲the git config documentation cleverly hides

diff.autoRefreshIndex

           當使用git的差異與工作樹中的文件進行比較,不要將僅統計變化視爲已更改。相反,請靜默運行git update-index --refresh以更新工作樹中的內容與索引中的內容匹配的路徑的緩存統計信息。該選項默認爲true。 請注意,這隻影響git diff瓷器,而不是更低級別的diff命令,如git diff-files。

(粗體字重點礦)。

雖然這談到了diff.autoRefreshIndex設置,它適用於的配置項的所有git diff讀取和服從你的配置,但git diff-indexgit diff-files等別(故意,使腳本,應當使用管道命令而不是瓷器,可以獲得正確的行爲,無論新添加的選項如何)。

這到底意味着什麼,如果你特指git add --interactive,答案是否定的,或者說,不是沒有一點工作。交互式添加Perl腳本使用管道命令,而不是瓷器git diff,因此它必須自己獲取和使用任何此類設置。它確實獲取並使用您的diff.algorithmdiff.compactionHeuristic設置,但它確實不是使用您的diff.context設置。

製作它這樣做很容易,但需要稍微修改的Git:

diff --git a/usr/local/libexec/git-core/git-add--interactive b/tmp/git-add--interactive 
index 235fb88..ba001a1 100755 
--- a/usr/local/libexec/git-core/git-add--interactive 
+++ b/tmp/git-add--interactive 
@@ -47,2 +47,3 @@ my $normal_color = $repo->get_color("", "reset"); 

+my $diff_context_size = $repo->config('diff.context'); 
my $diff_algorithm = $repo->config('diff.algorithm'); 
@@ -753,2 +754,6 @@ sub parse_diff { 
     } 
+  if (defined $diff_context_size) { 
+    my $Uarg = sprintf("-U%d", $diff_context_size); 
+    splice @diff_cmd, 1, 0, "$Uarg"; 
+  } 
     if ($diff_compaction_heuristic) { 

(有可能是一個更好的辦法來建立-U爭論;我的Perl是笨拙)。交互式補丁(或git add -p)模式需要添加此代碼段才能遵守diff.context設置。

當然,你可以簡單地splits)互動過程中添加一大塊,爲pedrorijo91 reminded us in a comment鏈接到Can I modify git-add's hunk size?,所以沒有真正的需要這一點。不過,它可能很好,如果它被包括在內。

+0

正是我在找的東西,非常感謝。 – repara2

+0

「還有一個'--inter-hunk-context'選項值(沒有相應的配置項)」...好了,現在有(Git 2.12):參見[commit c488867](https:// github。 com/git/git/commit/c488867793dc9b273c1d35746452d44afcd3d7f5)(2017年1月12日)[Vegard Nossum('vegard')](https://github.com/vegard)。 (在[commit 8ec68d1](https://github.com/git/git/commit/8ec68d1ae2863823b74d67c5e92297e38bbf97bc)中[Junio C Hamano - 'gitster' - ](https://github.com/gitster)合併, 2017年1月23日)。 – VonC

+0

@VonC:更新,謝謝。 – torek