【问题标题】:git blame with optional ignorerevsfile带有可选的 ignorerevsfile 的 git blame
【发布时间】:2022-01-22 21:41:27
【问题描述】:

我有大约 40 个 git 存储库,其中大部分都有一个 .git-blame-ignore-revs 文件用于与 git blame 一起使用。因此,我没有使用 blame.ignorerevsfile=.git-blame-ignore-revs 在本地配置它们中的每一个,而是将其应用于我的 global git config。

但是, 没有此类文件的少数存储库会受到它的影响:在它们上运行 git blame 会导致 fatal: could not open object name list: .git-blame-ignore-revs

有没有办法告诉 git 读取这样的文件如果它存在,否则忽略它?这将是理想的:设置简单,但如果不存在此类文件,则不引人注目。

【问题讨论】:

    标签: git git-blame


    【解决方案1】:

    有没有办法告诉 git 如果存在则读取此类文件,否则忽略它?

    没有。要么使用

    git config --local blame.ignoreRevsFile .git-blame-ignore-revs
    

    而不是--global。或者使用

    git config --local blame.ignoreRevsFile ""
    

    在那些文件不存在的存储库中。空文件名means "do not use any file"

    或者创建空的.git-blame-ignore-revs 文件。

    更新。使用新的临时存储库进行测试:

    git init test-git
    cd test-git
    
    git config --global blame.ignoreRevsFile test
    git config --show-origin blame.ignoreRevsFile
    file:/home/phd/.gitconfig       test
    
    git config --local blame.ignoreRevsFile ""
    git config --show-origin blame.ignoreRevsFile
    file:.git/config
    

    更新2

    git blame testfile
    fatal: could not open object name list: test
    

    哎哟!

    【讨论】:

    • 如果本地配置从全局配置接管会很棒,允许忽略前者。但是,尽管您的链接说空文件名将重置忽略的修订列表,并且this page 说“文件按照上面给出的顺序读取[全局在本地之前],最后一个值发现优先于之前读取的值”,它仍然不起作用,可能是由于这种行为:“当采用多个值时,将使用来自所有文件的键的所有值。”
    • @anol 请在没有文件的 repo 中显示git config --show-origin blame.ignoreRevsFile 的结果。
    • 它按预期显示file:$HOME/.gitconfig .git-blame-ignore-revs,因为我之前通过--global 设置它。在我看来,与文档的行为略有偏差。即使添加选项--ignore-revs-file "",即documented,因为空文件名“”将清除先前处理的文件中的转速列表,但情况似乎并非如此我:git 仍然搜索.git-blame-ignore-revs 文件并且命令失败。
    • @anol 哎呀,你是对的!请参阅 Upd2。我会说这是git blame 中的一个错误。
    • 显然related patch 已在 8 月份向 git 提出,但从那以后我认为它并没有太大进展。但类似的东西可能会出现在未来的 Git 版本中。
    猜你喜欢
    • 2019-12-20
    • 1970-01-01
    • 2012-05-21
    • 2011-04-26
    • 2012-11-09
    • 1970-01-01
    • 1970-01-01
    • 2018-08-30
    • 1970-01-01
    相关资源
    最近更新 更多