如果您指的是简单的git diff,则大块上下文大小是可配置的:如果指定,则通过-U 选项设置,否则通过diff.context 设置(如果设置)。如果所有这些都失败,则默认为三行上下文(上方和下方)。
因此:
$ git config --global diff.context 1
将 diff 上下文减少到每个方向上的一行,而不是 3。还有一个 --inter-hunk-context 选项值,您可以使用它来将更多大块融合在一起(这与您想要的相反,所以我只提到它为了完整性;请参阅diff.interHunkContext,在 Git 2.12 及更高版本中可用;另请参阅--function-context aka -W)。
但是,git add --interactive 运行 git diff-files 或 git diff-index 而不是普通的 git diff,以及 the git config documentation cleverly hides:
diff.autoRefreshIndex
使用 git diff 与工作树文件进行比较时,不要将仅统计更改视为已更改。相反,静默运行git update-index --refresh 以更新工作树中的内容与索引中的内容匹配的路径的缓存统计信息。此选项默认为 true。 请注意,这仅影响 git diff Porcelain,而不影响较低级别的 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)模式需要添加这个sn-p才能遵守你的diff.context设置。
当然,您可以在交互式添加过程中简单地split (s) 一个大块,因为pedrorijo91 reminded us in a comment 链接到Can I modify git-add's hunk size?,所以没有真正需要这个。不过,如果包含它可能会很好。