在git(和diff)的上下文中,什么是"大块头"

nzc*_*nzc 11 git diff

我在阅读一些git文档时正在寻找"hunk"的定义.

我知道这意味着描述两个文件之间的区别,并且它有一个定义良好的格式,但我无法想到一个简洁的定义.

我尝试用谷歌搜索,但有很多有点虚假的点击.

nzc*_*nzc 11

最后我发现了这个:

比较两个文件时,diff会查找两个文件共有的行序列,其中散布着名为hunks的不同行组.

这里:http: //www.gnu.org/software/diffutils/manual/html_node/Hunks.html

这正是我所寻找的那种简洁的定义.希望这可以帮助其他人!

  • 如果您修改了文件,您可以使用“git diff --no-ext-diff”看到帅哥。 (2认同)

Von*_*onC 6

术语"大块头"确实不是Git特有的,而是来自Gnu diffutil格式.更简洁:

每个块显示文件不同的一个区域.

但Git面临的挑战是确定一个大块头的正确边界.

其余的答案有助于说明Git中的大块头:

经过各种启发式测试(比如压缩版本,在Git 2.12中消失了),Git维护者选择了缩进版本,该版本于20169月推出,使用Git 2.11,提交433860f.

diff中添加/删除的一些组可以向上或向下滑动,因为组边缘的线不是唯一的.
为这些群体挑选好的转变不是正确的问题,但肯定会对美学产生重大影响.
例如,考虑以下两个差异.
第一个是标准Git发出的:

--- a/9c572b21dd090a1e5c5bb397053bf8043ffe7fb4:git-send-email.perl
+++ b/6dcfa306f2b67b733a7eb2d7ded1bc9987809edb:git-send-email.perl
@@ -231,6 +231,9 @@ if (!defined $initial_reply_to && $prompting) {
 }

 if (!$smtp_server) {
+       $smtp_server = $repo->config('sendemail.smtpserver');
+}
+if (!$smtp_server) {
        foreach (qw( /usr/sbin/sendmail /usr/lib/sendmail )) {
                if (-x $_) {
                        $smtp_server = $_;
Run Code Online (Sandbox Code Playgroud)

以下差异是等价的,但从美学的角度来看显然是优选的:

--- a/9c572b21dd090a1e5c5bb397053bf8043ffe7fb4:git-send-email.perl
+++ b/6dcfa306f2b67b733a7eb2d7ded1bc9987809edb:git-send-email.perl
@@ -230,6 +230,9 @@ if (!defined $initial_reply_to && $prompting) {
        $initial_reply_to =~ s/(^\s+|\s+$)//g;
 }

+if (!$smtp_server) {
+       $smtp_server = $repo->config('sendemail.smtpserver');
+}
 if (!$smtp_server) {
        foreach (qw( /usr/sbin/sendmail /usr/lib/sendmail )) {
                if (-x $_) {
Run Code Online (Sandbox Code Playgroud)

这个补丁教导Git使用启发式方法为这种"差异滑块"选择更好的位置,该方法考虑了附近空白线的位置和附近线的缩进.


使用Git 2.14(2017年第3季度),缩进启发式将是默认的!

请参阅Jeff King()提交1fa8a66(2017年5月8日). 见Stefan Beller()提交33de716(2017年5月8日). 请参阅Marc Branchaud的提交37590ce,提交cf5e772(2017年5月8日).(通过合并JUNIOÇ滨野- -提交53083f8,2017年6月5日)peff
stefanbeller

gitster

diff:默认启用缩进启发式

该功能包含在v2.11(2016-11-29发布)中,我们没有得到任何负面反馈.恰恰相反,我们得到的所有反馈都是积极的.

默认情况下将其打开.不喜欢该功能的用户可以通过设置将其关闭diff.indentHeuristic.