如何阻止 git 在 cygwin 上使文件不可执行?

Posted

技术标签:

【中文标题】如何阻止 git 在 cygwin 上使文件不可执行?【英文标题】:How to stop git from making files non-executable on cygwin? 【发布时间】:2011-10-26 07:11:39 【问题描述】:

我通过 cygwin 在 Windows 上使用 git,并很快决定使用 filemode=false(否则在最初的 git 克隆之后我有很多更改)。我绝对对跟踪权限根本不感兴趣,我唯一需要的是让某些文件可执行。有时,我发现某些文件上的x 标志丢失了,我强烈认为这是因为 git。

我很高兴有一个允许在需要时执行chmod a+x ... 的解决方案。

【问题讨论】:

【参考方案1】:

你应该以git update-index --chmod=+x <file>开头。

但这不会改变你的工作副本,因为:

git checkout .

【讨论】:

【参考方案2】:

我遇到了同样的问题。 git update-index --chomd=+x 对我不起作用。

我使用 chmod +x ,然后提交,效果很好。

【讨论】:

或者使用update-index,提交,再次签出文件。【参考方案3】:

我相信你想要git update-index --chmod=+x <file>,然后是提交。

【讨论】:

我认为它没有帮助,因为我使用的是filemode=false,所以我认为在从 git 中获取文件后我必须做一些事情(而不是把它们放在 git 中)。每当 git 更改或创建文件时都适用的东西。此外,它应该会自动运行。 The docs 特别推荐该命令用于 filemode=false 的系统。如果我理解正确,该设置仅适用于权限更改的自动检测。 Git 仍然存储一个文件模式,这是您执行git ls-tree HEAD 时的第一列。如果它显示为 644 而不是 755,则 git 在写入该文件时不会设置可执行位。 我明白我误解了filemode=false。我以某种方式认为,它会禁用存储位,但“索引和工作副本之间的可执行位差异被忽略”。 现在我明白了......它可以工作,但如果我签出旧版本当然不会。这是我在第一次提交可执行文件后应该做的事情(不是太晚了,因为我真的不想重新调整整个历史记录)。这并不完美,但它有帮助,谢谢。 我使用的是 Cygwin 版本的 git。我的同事使用“git bash”外壳,它使用 MSYS 而不是 Cygwin。他们应该一起愉快地工作,但是其他人签入的 *.bat 文件似乎对他们来说是可执行的,但对我来说却不是。我认为 MSYS 在创建 *.bat 文件时隐式地使它们可执行,但在签入时不会费心保留可执行位; Cygwin 不这样做。 (我运行chmod +x 并在需要时检查它们。)

以上是关于如何阻止 git 在 cygwin 上使文件不可执行?的主要内容,如果未能解决你的问题,请参考以下文章

如何阻止 NetBeans 使用 Cygwin bin 目录并使其使用 MSYS?

为啥某些 Cygwin 文件不可执行?

Cygwin中使用git时无法远程推送(出现DLL文件不兼容)

文件权限从 Git Bash 到 Cygwin 命令行有所不同

Cygwin及Git的mintty终端配色配置

cygwin配置git