Windows 10系统中,在console下(这里用cmder)下创建一个文件,
不论通过程序(Python, PowerShell),还是手工用文本编辑器创建,
在cygwin下,都会被加上可执行权限(在cmder下用ls -l
查看没有可执行权限),
但这个权限不会被提交到git repo中。按正常文件处理即可。
如果执行 git diff
时返回如下结果:
old mode 100755
new mode 100644
一个可能的原因是:此文件在Linux系统中被修改时由于某种原因被加上了可执行权限, 然后被提交到了代码库中,在Windows中被检出时,由于系统发生了变化, 无法恢复其可执行权限,被检出的文件不具备可执行权限,被 git 认为发生了变化。
解决方法分两种情况:需要保留可执行权限的和不需要保留可执行权限的。
需要保留权限
比如一些可执行脚本,需要保留其可执行权限,
这时需要在repo根目录下执行 git config core.filemode false
,
这样 Windows 就不会检查可执行这一项了。
不需要保留权限
在shell或者cygwin下首先执行find . -maxdepth 1 -type f -executable
找到具有可执行权限的文件,然后执行chmod 644 filename
去掉执行权限,然后提交。
也可以要求 git 忽略对权限的检查,但不推荐这个方案。
详细问题及解决方法见 How do I remove files saying “old mode 100755 new mode 100644” from unstaged changes in Git? 和 finding executable files using ls and grep。