查找更改文件权限的提交

4

如何使用git log或类似命令的参数组合来查找更改文件权限的提交记录?

我可以使用git log -p <file>并使用grep命令查找“new mode”,但这似乎并不是很令人满意。

3个回答

7
我的解决方案使用git log --summarygrep 列出所有修改了给定文件权限的提交记录
git log --summary {file} |grep -e ^commit -e"=>"|grep '=>' -B1 | grep ^commit

如果省略 {file} 参数,将列出所有提交,其中任何文件的权限都被修改了。

2

我认为没有一个选项可以直接导致一个“更改文件权限”的消息,但是你可以使用 git log --raw -- file.sh 命令,并查看该文件的前两列条目,即旧模式和新模式。你可以使用一个简单的 awk 脚本来比较这两个模式...


0

Git不存储文件权限。它使用(umask调节的)777来检出可执行文件和目录,对于普通文件则使用666,如下所示(当然,ls输出被截断了)

$ git checkout empty
$ umask 0
$ git clean -dfx
$ git checkout master
$ ls -l
-rw-rw-rw-  1 jthill jthill   4012 May 13 13:30 tag.c
drwxrwxrwx  2 jthill jthill   4096 May 13 13:30 builtin
-rwxrwxrwx  1 jthill jthill  22332 May 13 13:30 git-am.sh
lrwxrwxrwx  1 jthill jthill     32 May 13 13:30 RelNotes -> Documentation/RelNotes/1.8.2.txt

1
大多数情况下,它确实为文件存储了两种不同的模式:普通文件的644和可执行文件的755。 - poke
1
虽然它不存储用户/组/其他权限,但它确实存储可执行和符号链接位。 - forivall
我发现在代码库中关于文件权限的信息非常难找。但是在 https://www.kernel.org/pub/software/scm/git/docs/user-manual.html#def_blob_object 中有这样一段话:树对象:一个包含文件名列表和模式的对象... - gcbenison
@poke 没错,我正在寻找一种方法来搜索最近更改可执行权限位的提交。 - gcbenison
@jthill 当检出文件时,您的操作系统可能会对其应用一些不同的模式,但Git本身仅存储上述模式。 - poke
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接