代码之家  ›  专栏  ›  技术社区  ›  donquixote

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

  •  3
  • donquixote  · 技术社区  · 7 年前

    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..”头中的散列指定一个固定长度。

    如何控制这些散列的长度?

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

    -index 52a2a35..7813257 100755
    +index 52a2a357e..78132574a 100755
    
    1 回复  |  直到 7 年前
        1
  •  5
  •   Edward Thomson    7 年前

    --abbrev 选项仅适用于“差异原始格式输出和差异树标题行”。对于标准修补程序输出,可以使用 git diff --full-index man page :

    --full-index
    生成时在“索引”行上张贴图像blob对象名称

    这将产生如下输出:

    diff --git a/foo b/foo
    index c7bc37b70c7e29e3e4ed048c22ca3929367aa171..ab10096fde76d8c1d6172bd09d0dc4a18fb2c2fa 100644
    Binary files a/foo and b/foo differ
    
        2
  •  1
  •   VonC    5 年前

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

    diff 该命令家族对补丁中涉及的blob的对象名称进行了缩写,但其长度为 --abbrev

    commit 3046c7f (2020年8月21日)由 Đoàn Trần Công Danh ( sgn ) .
    看见 commit fc7e73d (2020年8月21日)由 brian m. carlson ( bk2204 ) .
    (由合并) Junio C Hamano -- gitster -- 在里面 commit 096c948

    diff :索引行:尊重 --阿巴雷夫 以对象的名义

    签字人:on Trán Cng Danh

    Git的一些命令尊重 --阿巴雷夫 用于自定义对象名称缩写的长度。

    对于diff系列,Git支持两种不同的选项,用于两种不同的用途:

    • --full-index
    • --阿巴雷夫 自定义diff raw和diff tree标题行中对象名称的长度,而不使用任何选项自定义diff patch格式中对象名称的长度。

    当使用diff补丁格式时,我们只有两个选项,完整索引或默认abbrev长度。

    尽管这种行为已被记录在案,但它并没有阻止用户尝试使用 --阿巴雷夫 希望能定制diff patch对象名称的缩写。

    index “行缩写为通过给定的任意长度” --阿巴雷夫

    要保留与旧脚本的向后兼容性,请同时指定 --完整索引 ,始终显示完整的对象id,如果 --完整索引 是指定的。

    diff-options 现在包括在其 man page

    在diff patch输出格式中, --完整索引 具有更高的优先级,即如果 --完整索引 --阿巴雷夫 .

    可以使用指定非默认位数 --abbrev=<n>


    --abbrev=<n> 比较长的 比“ <n> “十六进制数字,已通过Git 2.30(2021年第1季度)进行了澄清。

    看见 commit cda34e0 Junio C Hamano ( gitster ) .
    朱尼奥哈马诺-- 吉斯特 -- 在里面 commit ee13beb

    doc :澄清 大约是最小长度

    2006年的早期文本解释了 选项“仅显示部分前缀”,而不说明部分前缀的长度不一定是指定给选项的数字,以确保输出唯一地命名对象。

    更新diff命令系列的文档,“ blame ", " branch --verbose ", " ls-files “和” ls-tree 强调短前缀必须唯一地引用对象,并且仅是前缀中使用的最小十六进制数字数。

    现在包括在其 man page :

    行,显示最短前缀,该前缀至少为' <n> '

    git blame 现在包括在其 man page

    缩写对象名称,使用 <m>+1 数字,在哪里 <m> 至少 <n> 但要确保提交对象名称是唯一的。

    git branch man page

    --abbrev=<n>

    在显示提交对象名称的详细列表中, 显示最短前缀,该前缀至少为' <n> 唯一引用对象的long。