gpt4 book ai didi

git - "diff --git"中输出的 "git diff"指的是什么?

转载 作者:IT王子 更新时间:2023-10-29 01:25:47 24 4
gpt4 key购买 nike

当我运行 git diff 时,输出开始于:

diff --git a/foo/bar b/foo/bar

如果我尝试运行普通的旧 diff --git,我被告知 --git 选项不存在(显然,我猜,它对于了解特定 DVCS 的低级工具来说似乎很愚蠢)。 man 页面中也没有提及它。这是从哪里来的?

最佳答案

这是一个“虚构的差异选项”,用于向读者表明它不只是运行diff 的输出。命令。比如在git自己的git repo中:

$ git diff HEAD~1..HEAD | head
diff --git Documentation/git.txt Documentation/git.txt
index bd659c4..7913fc2 100644
--- Documentation/git.txt
+++ Documentation/git.txt
@@ -43,6 +43,11 @@ unreleased) version of Git, that is available from the 'master'
branch of the `git.git` repository.
Documentation for older releases are available here:

+* link:v2.10.0/git.html[documentation for release 2.10]
+
$

diff命令本身,如果您使用相同的文件名调用它两次,将不会显示任何差异。 git大概会创建对应于 Documentation/git.txt 的两个不同版本的临时文件并将它们提供给 diff -- 但这些临时文件的名称不会有用。我想git diff按摩 diff 的输出使它对读者更有意义。 (这个推测并不完全正确。见下文。)

深入研究 git 源代码,diff.c有字符串 "diff --git"硬连线为字符串文字:

strbuf_addf(&header, "%s%sdiff --git %s %s%s\n", line_prefix, meta, a_one, b_two, reset);

并查看 diff.c 的历史对于包含该字符串的最早版本:

$ git log -n 1 b58f23b3
commit b58f23b38a9a9f28d751311353819d3cdf6a86da
Author: Junio C Hamano <junkio@cox.net>
Date: 2005-05-18 09:10:47 -0700

[PATCH] Fix diff output take #4.

This implements the output format suggested by Linus in
<Pine.LNX.4.58.0505161556260.18337@ppc970.osdl.org>, except the
imaginary diff option is spelled "diff --git" with double dashes as
suggested by Matthias Urlichs.

Signed-off-by: Junio C Hamano <junkio@cox.net>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
$

大概是<Pine.LNX...>是某个邮件列表中某处电子邮件的消息 ID。无论如何,此提交消息清楚地表明 diff --git是一个“假想差异选项”。

This email message ,在评论中被 no 引用,似乎是导致此问题的讨论的一部分。

更新: 我在上面推测 git diff按摩 diff 的输出, 添加此信息。我刚刚尝试运行 git diffstrace 下.它实际上并没有调用 diff命令,或任何其他命令。相反,所有输出都由 git 打印过程本身,显然它在内部计算差异。此行为还可能取决于 git 的版本(我使用的是 2.23.0),diff可用的命令和使用的参数。

我会注意到 GNU diff 有一个 --label=LABEL 可以用于这种事情的选项:

'-L LABEL'
'--label=LABEL'
Use LABEL instead of the file name in the context format (*note
Context Format::) and unified format (*note Unified Format::)
headers. *Note RCS::.

但是git diff不使用它,至少在我尝试过的一种情况下,我没有在 git 源代码中看到对它的引用。

关于git - "diff --git"中输出的 "git diff"指的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39834729/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com