如何阻止 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中使用git时无法远程推送(出现DLL文件不兼容)