$ git add test-file
$ git commit -m 'first commit'
create mode 100644 test-file
$ git push
$ git update-index --add --chmod=+x test-file
$ git commit -m 'change mode'
mode change 100644 => 100755 test-file
$ git push
之后,如果你去GitHub,它仍然显示为100644无论如何。
答案 0 :(得分:30)
MSYS不是问题。即使MSYS chmod
不起作用(它没有),Git也有一种解决这个问题的内置方法,即git update-index --chmod=+x
。很明显,git update-index
只会与索引(临时区域)混淆,而不是本地存储库(工作目录)。
我确信问题出在GitHub上。在GitHub上,如果文件最初按模式100775推送,一切都很好。如果文件最初被推送为100644,则会导致问题。尝试更改文件模式将成功git add
,成功git commit
,成功git push
,甚至出现在GitHub文件历史记录中,但不反映在GitHub上的“blob / master”页面上。
更新
来自:Petros Amiridis(GitHub员工)
主题:如何在GitHub上更改文件模式?
我有一些好消息。我们很棒的团队刚刚确认它是一个缓存错误 在我们的结束。我们的团队已经部署了修复程序。
答案 1 :(得分:12)
我认为问题是git的Windows实现所基于的MSYS无法正确处理chmod
。
(编辑:另一个答案说MSYS不是问题,这看起来似乎有道理。)
我猜是命令
git update-index --add --chmod=+x test-file
通过更新本地存储库中的元数据(应该可以工作)并更改文件的权限(不存在),使本地存储库处于不一致状态。
你应该可以通过撤消update-index
:
git update-index --add --chmod=-x test-file
git commit -m 'change mode back'
git push
将存储库恢复到一致状态,然后在存储库的非Windows副本中进行更改。如果您无法访问Linux或其他类Unix系统,Cygwin包括git
(默认情况下不是,但您可以通过setup.exe
安装)并为您提供环境其中chmod
实际上有效。 Cygwin的默认shell是bash,所以如果你一直在使用git bash,环境应该很熟悉。
当您从git bash shell查看文件时,该文件似乎仍然不可执行,但它应该在GitHub Web界面中显示为100755
。