在Windows上查询git索引中的chmod值



是否有任何方法可以测试文件是否标记为可从Windows执行?

我发现,当我创建shell脚本时,我需要运行git update-index --chmod=+x myfile.sh来设置可执行标志(相关文档(。我想创建一个预提交挂钩来检查git索引中的这个标志,并在它不存在时警告我。但是,似乎没有git query-index类型的命令允许我检查文件是否被授予了可执行权限。Git Bash似乎能够看到这一点,因为它以绿色显示了可执行文件,但我不确定它是如何做到这一点的。

我想创建一个预提交挂钩来检查git索引中的[可执行权限],如果不存在,则会发出警告。但是,似乎没有git query-index类型的命令允许我检查文件是否被授予了可执行权限。

要从Git的索引中读取信息,请使用git ls-files --stage。在没有参数的情况下,这将转储整个索引内容;使用pathspec(文件或目录名、glob表达式等(,它会转储出与pathspec匹配的名称。

每行上的第一个条目是模式。只有两个有效的";文件";模式,1100644100755,因此以其中一个开始的每一行表示将进入下一次提交的文件。100644文件是chmod=-x的文件,而100755文件是chmod=+x的文件。任何不是这两种模式之一的文件都不是普通文件。

请注意,这只与Git的索引设置有关。Windows文件系统使用不同的安全模型,这与Git的执行/不执行概念不太适应。有关Cygwin如何实现其chmod的讨论的一些链接,请参阅此超级用户的回答及其评论。


1在已经不再使用的早期Git版本中,允许更多的100xxx模式;CCD_ 13部分是标准Unix CCD_。这被发现是一个错误,所以现在模式总是rw-r--r--(644(或rwxr-xr-x(755(。任何具有其他前导位的条目都表示其他内容:120000是符号链接,160000是gitlink。模式040000是为树对象保留的,但索引不包含这样的对象。这些模式位反映了Linux中inode格式的模式位,这就是为什么存在这些奇怪的间隙。

最新更新