把一批 git 项目从一台设备拷到另一台设备之后,未对文件做任何修改,但是进入到项目的根目录下,执行
git status
却发现所有的文件状态都是modified
。感觉比较诡异
执行
git diff --summary
发现大多都是mode change 100644 => 100755
,原来是拷贝文件的过程中,文件的权限被自动修改了,权限值由644变成了755.这种情况如何处理呢?
关闭 git 的 filemode
- 全局关闭
git config --global core.filemode false
- 单项目关闭
git config core.filemode false
修改文件的权限(推荐使用这个方法)
git diff --summary | grep --color 'mode change 100644 => 100755' | cut -d' ' -f7- | tr '\n' '\0' | xargs -0 chmod -x
git diff --summary | grep --color 'mode change 100755 => 100644' | cut -d' ' -f7- | tr '\n' '\0' | xargs -0 chmod -x
git diff --summary | grep --color 'mode change 100644 => 100755'
mode change 100644 => 100755 .gitignore
mode change 100644 => 100755 Makefile
mode change 100644 => 100755 pom.xml
cut -d' ' -f7-
对文本进行用 空格 进行切割取出第7列值(下标从1开始,f1为完整的字符窜)。也就是文件的全路径。
git diff --summary | grep --color 'mode change 100644 => 100755' | cut -d' ' -f7-
.gitignore
Makefile
pom.xml
tr '\n' '\0'
把分割符由
\n
变为\0
git diff --summary | grep --color 'mode change 100644 => 100755' | cut -d' ' -f7- | tr '\n' '\0'
.gitignoreMakefilepom.xml
xargs -0 chmod -x
将
\0
作为定界符文章来源:https://www.toymoban.com/news/detail-717970.html
修改所有满足条件的文件的文件权限
git diff --summary | grep --color 'mode change 100644 => 100755' | cut -d' ' -f7- | tr '\n' '\0' | xargs -0 chmod -x
检查是否修改成功
git diff --summary | grep --color 'mode change 100644 => 100755' | cut -d' ' -f7-
相反操作
给文件加权限文章来源地址https://www.toymoban.com/news/detail-717970.html
git diff --summary | grep --color 'mode change 100755 => 100644' | cut -d' ' -f7- | tr '\n' '\0' | xargs -0 chmod +x
到了这里,关于拷贝git项目后文件权限莫名其妙被修改(mode change 100644 => 100755),该如何处理?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!