我正在研究git的交互功能,從中我最重要的是git的合併和選擇。它工作得很好,但我需要胖子更小。在處理源代碼文件時,通常情況下,該大塊包含兩個不相關的更改(通常彼此間隔幾行)。 這可能是因爲git識別給定配置的hunk,比如線條分開,或者chars或者類似的東西。GIT:如何配置hunk的識別
這是正確的,如果是這樣,有什麼方法可以改變/重新配置這種行爲?
非常感謝,
我正在研究git的交互功能,從中我最重要的是git的合併和選擇。它工作得很好,但我需要胖子更小。在處理源代碼文件時,通常情況下,該大塊包含兩個不相關的更改(通常彼此間隔幾行)。 這可能是因爲git識別給定配置的hunk,比如線條分開,或者chars或者類似的東西。GIT:如何配置hunk的識別
這是正確的,如果是這樣,有什麼方法可以改變/重新配置這種行爲?
非常感謝,
如果你指的只是普通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-files
或git 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-index
和git diff-files
等別(故意,使腳本,應當使用管道命令而不是瓷器,可以獲得正確的行爲,無論新添加的選項如何)。
這到底意味着什麼,如果你特指git add --interactive
,答案是否定的,或者說,不是沒有一點工作。交互式添加Perl腳本使用管道命令,而不是瓷器git diff
,因此它必須自己獲取和使用任何此類設置。它確實獲取並使用您的diff.algorithm
和diff.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
設置。
當然,你可以簡單地split
(s
)互動過程中添加一大塊,爲pedrorijo91 reminded us in a comment鏈接到Can I modify git-add's hunk size?,所以沒有真正的需要這一點。不過,它可能很好,如果它被包括在內。
正是我在找的東西,非常感謝。 – repara2
「還有一個'--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
@VonC:更新,謝謝。 – torek
看看http://stackoverflow.com/questions/1122210/can-i-modify-git-adds-hunk-size – pedrorijo91
謝謝pedrorijo91,而不是我在找什麼。 – repara2