情景:
把git仓库从home文件夹移动到另一个磁盘(NTFS格式)的文件夹中,git status
出现大量修改的文件,使用git diff
只显示下图,即文件内容没有改变,只是文件的mode改变了.
原因分析
文件格式NTFS(window使用,linux也可以使用这种格式)没有Linux下丰富的权限设置。文件都被设置成了所有人员可读写执行。 git默认跟踪文件权限,因此当移动仓库导致文件权限改变后,git status
提示修改.(另外,git只记录执行权限,而不记录读写权限。换句话说,644的文件和664的文件,对git来说是没区别的。)
解决办法
一般而言,我们不关心文件权限的改变,只关心文件内容的改变.因此要设置git不跟踪文件权限.
- 先用
cat .git/config
查看当前仓库的配置,出现filemode=true
则表明跟踪了文件权限
- 命令行输入
git config core.filemode false
即可将filemode
设置为false
,此时git status
就不会出现因文件权限改变而导致的修改了.
上面是针对当前仓库的设置,也可以设置全局,对所有仓库都不跟踪文件权限.但是可能并不起作用,还是得对每个仓库单独设置
- 先查看一下全局配置:
git config --global -l
,默认情况下core.filemode=true
- 命令行输入
git config --global core.fileMode false
- 设置全局后,新建git仓库,并不起作用,用
cat .git/config
查看配置, 看到filenode=true
用git config -l
查看配置,看到filenode=false
和filenode=true
,上面的filenode=false
应该是全局设置的,下面的filenode=true
是建立仓库时默认设定的,最后还是本地设置filenode=true
起了作用,这里有待进一步探索解决办法
参考链接
https://blog.csdn.net/zhezhebie/article/details/84853608
https://learnku.com/laravel/t/5340/linux-solution-to-modify-the-file-permissions-caused-by-the-git-record-file-changes
https://cloud.tencent.com/developer/article/1560532