【问题标题】:Which commit made a file executable哪个提交使文件可执行
【发布时间】:2014-09-08 13:15:17
【问题描述】:

我在 git 存储库中有一个可执行文件。

我如何找出使该文件可执行的提交?

我尝试了git log file.txt,但没有显示文件模式和搜索手册页的变化,谷歌没有结果。

【问题讨论】:

    标签: git


    【解决方案1】:

    尝试使用 git bisect How to use git bisect?

    它可以通过以最佳方式选择提交来帮助您进行搜索。您将首先选择两个提交,一个不起作用,一个起作用。之后 git 会给你一个提交,你测试它是否有效并做出相应的响应。尝试几次后,您会找到正确的提交。

    【讨论】:

      【解决方案2】:

      用途:

      git log -p file.txt | grep --before-context 7 "old mode"
      

      (如果您的提交文本多行,请增加 before context line 选项,使其包含提交 ID)

      文件模式变化在日志中包括“旧模式”和“新模式”,就是这样工作的。

      【讨论】:

      • 谢谢!这正是我一直在寻找的。当有人意外地使某些东西可执行时,这是我个人的一个小烦恼。
      【解决方案3】:

      git log --raw(或git whatchanged,也跳过合并)提取模式:

      :100644 100644 bcd1234... 0123456... M file0
      

      第一个八进制数是旧模式,第二个是新模式。如果文件成为可执行文件,旧模式将以644 结束,新模式将以755 结束。常规文件在644755 之前具有模式100。所以这会很快找到它:

      git log --raw -- path/to/file | grep -B 1 '^:100644 100755 '
      

      如果有多个从不可执行到可执行的转换,这将找到所有这些。

      【讨论】:

        猜你喜欢
        • 2018-11-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-24
        • 2022-07-02
        • 1970-01-01
        • 2019-04-30
        相关资源
        最近更新 更多