拷贝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
  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值