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

时间:2016-06-03 17:57:01

标签: git diff

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

我知道这意味着对两个文件之间差异的描述,并且它具有明确定义的格式,但我无法想到一个简洁的定义。

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

3 个答案:

答案 0 :(得分:9)

最终我发现了这个:

  

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

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

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

答案 1 :(得分:5)

术语" hunk"确实不是Git特有的,来自Gnu diffutil format。更简洁:

  

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

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

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

在各种启发式方法之后(比如compaction one,在Git 2.12中消失了),Git维护者确定了缩进版本,这是在Sept. 2016 with Git 2.11, commit 433860f中引入的。

  

差异中添加/删除的一些组可以向上或向下滑动,   因为组边缘的线不是唯一的   为这些团体挑选好的转变不是正确的问题,但肯定会对美学产生重大影响
  例如,考虑以下两个差异   第一个是标准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 = $_;
  

以下差异是等价的,但显然优于   审美观点:

--- 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 $_) {
  

这个补丁教会Git为这样的"差异滑块选择更好的位置"   使用启发式算法来获取附近空白行的位置和   考虑附近线路的缩进

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

commit 1fa8a66Jeff King (peff)(2017年5月8日) 请commit 33de716查看Stefan Beller (stefanbeller)(2017年5月8日) 请参阅Marc Branchaud撰写的commit 37590cecommit cf5e772(2017年5月8日) (由Junio C Hamano -- gitster --合并于commit 53083f8,2017年6月5日)

  

diff:默认启用缩进启发式

     

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

     

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

答案 2 :(得分:1)

有关您的信息,您还可以阅读以下简单说明: https://mvtechjourney.wordpress.com/2014/08/01/git-stage-hunk-and-discard-hunk-sourcetree/