0

TL;博士

不同的祖先,空的差异,不同的程序。如何看出有什么不同?


我想,这个问题的答案应该是:如果它们相同,就没有区别。

我现在发生的事情是我有两个不同的修订版,似乎有一个空的差异。

> git diff --quiet a1e4 5010; echo $?
> 0

它们有不同的提交哈希,它们包含的程序行为不同,但它们diff是空的。这怎么可能?

有没有更强大的diff我不知道会显示出更深层次的差异?

哈希不是仅根据内容计算的吗?那为什么diff没有检测到任何东西?

这是图表

*   551d4dc very merge
|\
| |
| *   a1e4b09 wow!
| |\
| | |
| | *   a337e3c so uninteresting
| | |\
| | | |
| * | | a9f878a many unimportant
| |/ /
| | |
| * | 6d08e83 such irrelevance
| | |
* | | 5010427 wow!
| |/
|/|
| |
* | 74ac627 many father
|/
|
* f0aa6af such grandpa
|
.
4

2 回答 2

3

哈希不是仅根据内容计算的吗?那么为什么差异没有检测到任何东西?

的哈希值仅取决于其内容。提交包含对树的引用,还包含提交消息、日期、作者、对其父提交的引用等,其哈希是所有这些信息的哈希。两次提交可以反映相同的文件状态,它们之间没有差异,但具有不同的哈希值。事实上,他们必须这样做。

于 2018-01-10T11:02:04.117 回答
1

我想,这个问题的答案应该是:如果它们相同,就没有区别。

2 次提交的内容是相同的,这意味着在幕后 git 将为树(指针)使用相同的 SHA-1,但正如hobbs上面解释的那样,提交 SHA-1 是提交内容的校验和

提交包含 blob 树和更多信息。
提交对象本身只是元数据的校验和 (SHA-1),包括给定提交的树的树对象。

提交包含的信息比下图中包含的信息多,例如时间戳等。

为了了解提交中存储的内容,我们需要了解什么是提交。提交是附加到内容的元数据。

每次将文件添加到 git 时,它们都会开始被内容的 SHA-1 跟踪和命名。当您提交更改时,git 创建一个对象,该对象指向在此修订中提交的文件的树。

如果未进行任何更改,则树将指向与先前提交相同的树。如果有变化,就会有新的树。


在此处输入图像描述

如果您想查看提交的内容,请使用git show

 git show <SHA-1>

例如,下面是 git show 的样子:

在此处输入图像描述

于 2018-01-10T11:49:59.177 回答