拷贝git项目后文件权限莫名其妙被修改(mode change 100644 => 100755),该如何处理?

把一批 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作为定界符

修改所有满足条件的文件的文件权限

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-

相反操作

给文件加权限

git diff --summary | grep --color 'mode change 100755 => 100644' | cut -d' ' -f7- | tr '\n' '\0' | xargs -0 chmod +x

猜你喜欢

转载自blog.csdn.net/uwoerla/article/details/131058037
今日推荐