为什么 git-diff 默认在其空行上产生尾随空格?
Why does git-diff produce trailing whitespaces by default on its own empty lines?
我意识到这一点是因为预提交配置开始检查尾随空白条件(生成的有问题的差异本身就是回购的一部分,所以 git commit
捕获了空白的条件) .
我基本上指的是默认 git diff
输出中的所有空行,它们不是修补本身的一部分;例如diff --git a ...
行之前的所有空行;它们总是在 2 个换行符之间包含 1 个空格。
为了可读性,我相信它们是在显示周围相关代码时生成的,这些代码不是补丁的一部分,但是文件中的那些行本身没有空格!
例如更改包含以下内容的文件后:
hello = "Hellow Stack Overflow"
print(hello)
quit()
git diff
输出:
diff --git a/1.py b/1.py
index da132e0..4fdf846 100644
--- a/1.py
+++ b/1.py
@@ -1,4 +1,4 @@
-hello = "Hellow Stack Overflow"
+hello = "Hello Stack Overflow"
print(hello)
(补丁中 print(hello)
之前的行和 print(hello)
之后的行各有一个空格(删除空格:补丁仍然有效))
这是一个很好的例子。这又是原始差异,除了我在每行的末尾添加了 $
以提高可见性:1
diff --git a/1.py b/1.py$
index da132e0..4fdf846 100644$
--- a/1.py$
+++ b/1.py$
@@ -1,4 +1,4 @@$
-hello = "Hellow Stack Overflow"$
+hello = "Hello Stack Overflow"$
$
print(hello)$
$
git diff
使用一种 统一差异与上下文 的形式,默认情况下,设置了 -U3
:它应该使用“三行上下文” diff hunk 更改的上方和下方。在这里,更改的是第 1 行,因此首先没有上面的三行要包含,但是下面 是 三行(实际上有四行,所以 git diff
可以用 -U3
).
砍掉一个
在 diff 输出中,修改后的行以 +
或 -
为前缀,以指示添加或删除的行,未更改的上下文行以单个空格为前缀。如果缺少上下文行之前的空白,统一差异的一些天真消费者可能会感到不安,因此 Git 生成标准形式。
如果你愿意,可以使用-U0
到selectno-lines-of-context。 、git apply
本身(和其他 Git-suite 程序)通常不介意上下文行是否丢失其前导 space,因此您可以去掉这些 spaces 如果你想要上下文,但不喜欢死板的格式——但是知道上下文何时结束有点棘手(你必须使用 @@
行来保持计数,所以不要将它们与 --recount
).
1BSD vis
程序使用 -l
选项执行此操作。
我意识到这一点是因为预提交配置开始检查尾随空白条件(生成的有问题的差异本身就是回购的一部分,所以 git commit
捕获了空白的条件) .
我基本上指的是默认 git diff
输出中的所有空行,它们不是修补本身的一部分;例如diff --git a ...
行之前的所有空行;它们总是在 2 个换行符之间包含 1 个空格。
为了可读性,我相信它们是在显示周围相关代码时生成的,这些代码不是补丁的一部分,但是文件中的那些行本身没有空格!
例如更改包含以下内容的文件后:
hello = "Hellow Stack Overflow"
print(hello)
quit()
git diff
输出:
diff --git a/1.py b/1.py
index da132e0..4fdf846 100644
--- a/1.py
+++ b/1.py
@@ -1,4 +1,4 @@
-hello = "Hellow Stack Overflow"
+hello = "Hello Stack Overflow"
print(hello)
(补丁中 print(hello)
之前的行和 print(hello)
之后的行各有一个空格(删除空格:补丁仍然有效))
这是一个很好的例子。这又是原始差异,除了我在每行的末尾添加了 $
以提高可见性:1
diff --git a/1.py b/1.py$
index da132e0..4fdf846 100644$
--- a/1.py$
+++ b/1.py$
@@ -1,4 +1,4 @@$
-hello = "Hellow Stack Overflow"$
+hello = "Hello Stack Overflow"$
$
print(hello)$
$
git diff
使用一种 统一差异与上下文 的形式,默认情况下,设置了 -U3
:它应该使用“三行上下文” diff hunk 更改的上方和下方。在这里,更改的是第 1 行,因此首先没有上面的三行要包含,但是下面 是 三行(实际上有四行,所以 git diff
可以用 -U3
).
在 diff 输出中,修改后的行以 +
或 -
为前缀,以指示添加或删除的行,未更改的上下文行以单个空格为前缀。如果缺少上下文行之前的空白,统一差异的一些天真消费者可能会感到不安,因此 Git 生成标准形式。
如果你愿意,可以使用-U0
到selectno-lines-of-context。 git apply
本身(和其他 Git-suite 程序)通常不介意上下文行是否丢失其前导 space,因此您可以去掉这些 spaces 如果你想要上下文,但不喜欢死板的格式——但是知道上下文何时结束有点棘手(你必须使用 @@
行来保持计数,所以不要将它们与 --recount
).
1BSD vis
程序使用 -l
选项执行此操作。