为 Windows 上的 chmod 值查询 git 索引
Query git index for chmod values on Windows
有什么方法可以测试文件是否被标记为可执行文件 Windows?
我发现当我创建 shell 脚本时,我需要 运行 git update-index --chmod=+x myfile.sh
来设置可执行标志 (related docs)。我想创建一个预提交挂钩来检查 git 索引中的这个标志,如果它不存在则警告我。但是,似乎没有 git query-index
类型的命令让我检查文件是否被授予可执行权限。
Git Bash 似乎可以看到这一点,因为它以绿色显示可执行文件,但我不确定它是如何实现的。
I'd like to create a pre-commit hook to check for [executable permission] in the git index, and warn me if it's not present. However, there doesn't seem to be a git query-index
type command to allow me to check if the file's been granted executable permissions.
要从 Git 的索引中读取信息,请使用 git ls-files --stage
。没有参数,这会转储出整个索引内容;使用路径规范(文件或目录名称、glob 表达式等),它会转储出与路径规范匹配的名称。
每行的第一个条目是模式。目前只有两种有效的“文件”模式,1 即 100644
和 100755
,因此以其中之一开头的每一行都代表一个文件进入下一次提交。 100644
文件是 chmod=-x
文件,100755
文件是 chmod=+x
文件。任何不是这两种模式之一的都不是普通文件。
请注意,这仅与 Git 的索引设置有关。 Windows 文件系统使用不同的安全模型,这不太适合 Git 的 execute/no-execute 概念。请参阅 this SuperUser answer 及其对一些 link 到 Cygwin-related 关于 Cygwin 如何实现其 chmod
的讨论的评论。
1在很早的 Git 版本中,不再使用,更多的 100xxx
模式被允许; xxx
部分是标准的 Unix chmod
权限。这被发现是一个错误,所以现在模式总是 rw-r--r--
(644) 或 rwxr-xr-x
(755)。任何具有其他前导位的条目都表示其他内容:120000
是一个符号 link,而 160000
是一个 gitlink。模式 040000
为树对象保留,但索引不包含此类对象。这些模式位反映了 Linux 中的 inode 格式模式位,这就是为什么会有这些奇怪的差距。
有什么方法可以测试文件是否被标记为可执行文件 Windows?
我发现当我创建 shell 脚本时,我需要 运行 git update-index --chmod=+x myfile.sh
来设置可执行标志 (related docs)。我想创建一个预提交挂钩来检查 git 索引中的这个标志,如果它不存在则警告我。但是,似乎没有 git query-index
类型的命令让我检查文件是否被授予可执行权限。
Git Bash 似乎可以看到这一点,因为它以绿色显示可执行文件,但我不确定它是如何实现的。
I'd like to create a pre-commit hook to check for [executable permission] in the git index, and warn me if it's not present. However, there doesn't seem to be a
git query-index
type command to allow me to check if the file's been granted executable permissions.
要从 Git 的索引中读取信息,请使用 git ls-files --stage
。没有参数,这会转储出整个索引内容;使用路径规范(文件或目录名称、glob 表达式等),它会转储出与路径规范匹配的名称。
每行的第一个条目是模式。目前只有两种有效的“文件”模式,1 即 100644
和 100755
,因此以其中之一开头的每一行都代表一个文件进入下一次提交。 100644
文件是 chmod=-x
文件,100755
文件是 chmod=+x
文件。任何不是这两种模式之一的都不是普通文件。
请注意,这仅与 Git 的索引设置有关。 Windows 文件系统使用不同的安全模型,这不太适合 Git 的 execute/no-execute 概念。请参阅 this SuperUser answer 及其对一些 link 到 Cygwin-related 关于 Cygwin 如何实现其 chmod
的讨论的评论。
1在很早的 Git 版本中,不再使用,更多的 100xxx
模式被允许; xxx
部分是标准的 Unix chmod
权限。这被发现是一个错误,所以现在模式总是 rw-r--r--
(644) 或 rwxr-xr-x
(755)。任何具有其他前导位的条目都表示其他内容:120000
是一个符号 link,而 160000
是一个 gitlink。模式 040000
为树对象保留,但索引不包含此类对象。这些模式位反映了 Linux 中的 inode 格式模式位,这就是为什么会有这些奇怪的差距。