【发布时间】:2014-09-08 13:15:17
【问题描述】:
我在 git 存储库中有一个可执行文件。
我如何找出使该文件可执行的提交?
我尝试了git log file.txt,但没有显示文件模式和搜索手册页的变化,谷歌没有结果。
【问题讨论】:
标签: git
我在 git 存储库中有一个可执行文件。
我如何找出使该文件可执行的提交?
我尝试了git log file.txt,但没有显示文件模式和搜索手册页的变化,谷歌没有结果。
【问题讨论】:
标签: git
尝试使用 git bisect How to use git bisect?
它可以通过以最佳方式选择提交来帮助您进行搜索。您将首先选择两个提交,一个不起作用,一个起作用。之后 git 会给你一个提交,你测试它是否有效并做出相应的响应。尝试几次后,您会找到正确的提交。
【讨论】:
用途:
git log -p file.txt | grep --before-context 7 "old mode"
(如果您的提交文本多行,请增加 before context line 选项,使其包含提交 ID)
文件模式变化在日志中包括“旧模式”和“新模式”,就是这样工作的。
【讨论】:
git log --raw(或git whatchanged,也跳过合并)提取模式:
:100644 100644 bcd1234... 0123456... M file0
第一个八进制数是旧模式,第二个是新模式。如果文件成为可执行文件,旧模式将以644 结束,新模式将以755 结束。常规文件在644 或755 之前具有模式100。所以这会很快找到它:
git log --raw -- path/to/file | grep -B 1 '^:100644 100755 '
如果有多个从不可执行到可执行的转换,这将找到所有这些。
【讨论】: