我一直在寻找" hunk"的定义。在阅读一些git文档时。
我知道这意味着对两个文件之间差异的描述,并且它具有明确定义的格式,但我无法想到一个简洁的定义。
我尝试用谷歌搜索,但有很多虚假的点击。
答案 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 1fa8a66见Jeff King (peff
)(2017年5月8日)
请commit 33de716查看Stefan Beller (stefanbeller
)(2017年5月8日)
请参阅Marc Branchaud撰写的commit 37590ce,commit cf5e772(2017年5月8日)
(由Junio C Hamano -- gitster
--合并于commit 53083f8,2017年6月5日)
diff:默认启用缩进启发式
该功能包含在v2.11(2016-11-29发布)中,我们没有 负面反馈。恰恰相反,我们得到的所有反馈都是积极的。
默认情况下将其打开。不喜欢该功能的用户可以将其关闭 设置
diff.indentHeuristic
。
答案 2 :(得分:1)