如何控制git diff头中的哈希长度

don*_*ote 3 git git-diff

git diff的输出包含一个标题,如下所示:

index f8fdb16de,78132574a..000000000
Run Code Online (Sandbox Code Playgroud)

git help diff,这解释如下:

2. It is followed by one or more extended header lines (this example shows a merge with two parents):

       index <hash>,<hash>..<hash>
       mode <mode>,<mode>..<mode>
       new file mode <mode>
       deleted file mode <mode>,<mode>
Run Code Online (Sandbox Code Playgroud)

我想使用git diff来创建补丁,我希望这些补丁具有可预测的格式,以便进行比较.为此,我需要一个固定长度的"index .."标题中的哈希.

如何控制这些哈希的长度?

我试过--abbrev = 7,但似乎没有效果.

我仍然看到我的补丁更新如下:

-index 52a2a35..7813257 100755
+index 52a2a357e..78132574a 100755
Run Code Online (Sandbox Code Playgroud)

Edw*_*son 5

--abbrev选项仅适用于"diff-raw格式输出和diff-tree标题行".对于标准补丁输出,您可以使用git diff --full-index获取完整的,未缩写的blob ID.从手册页:

--full-index
在生成补丁格式输出时,在"索引"行上显示完整的前映像和后映像blob对象名称,而不是第一个字符.

这将产生如下输出:

diff --git a/foo b/foo
index c7bc37b70c7e29e3e4ed048c22ca3929367aa171..ab10096fde76d8c1d6172bd09d0dc4a18fb2c2fa 100644
Binary files a/foo and b/foo differ
Run Code Online (Sandbox Code Playgroud)

  • 值得一提的是:缩短的`index`散列值吐出来自生成短散列的代码,然后一直延长它直到它是唯一的.生成的长度取决于存储库中的对象数.将更多对象添加到现有存储库中,您在昨天(或去年或过去的任何其他时间)从中生成补丁,然后再次生成补丁,这次缩短的`index`行可能会更长.正如EdwardThomson所说,使用`--full-index`来获得非缩写的哈希:这是获得可预测长度的唯一方法. (2认同)