首页 > 解决方案 > 如何控制 git diff 标头中的哈希长度

问题描述

git diff 的输出包含一个像这样的标题:

index f8fdb16de,78132574a..000000000

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>

我想使用 git diff 创建补丁,并且我希望这些补丁具有可预测的格式,以便可以进行比较。为此,我需要一个固定长度的“index ..”标头中的散列。

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

我试过--abbrev=7,但是好像没有效果。

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

-index 52a2a35..7813257 100755
+index 52a2a357e..78132574a 100755

标签: gitgit-diff

解决方案


--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

推荐阅读