DarkMatter in Cyberspace
  • Home
  • Categories
  • Tags
  • Archives

解决Git提交时文件权限变更问题


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。



Published

Aug 5, 2017

Last Updated

Aug 5, 2017

Category

Tech

Tags

  • cross platform 1
  • cygwin 5
  • Linux 158
  • Windows 67

Contact

  • Powered by Pelican. Theme: Elegant by Talha Mansoor