问题
由于经常会在windows
和linux
间交替写代码,因此也经常遇到使用git status
查看有变更,使用git diff
查看却没有看到差异的情况,原因有两种:
-
换行符的差异
-
文件权限的差异
换行符
默认情况下,windows
使用crlf
做为换行符,linux
使用lf
做为换行符,不进行配置和处理的话,自然会出现上述情况。
通常情况下,windows
下的git
进行如下配置:
|
|
linux
下进行如下配置:
|
|
如此,可解决绝大部分换行符问题,但对于需要精细化控制的场景显然不够,对此,可通过仓库的.gitattributes
进行配置实现。
|
|
文件权限
在windows
下,准确说是windows
的文件系统下(如ntfs
),git init
一个仓库时,其filemode
默认是false
,即忽略文件权限的变化;而linux
的文件系统下(如ext4
),其filemode
默认是true
,即跟踪文件权限的变化。若是在两者之间交替工作,或是拷贝文件,则会出现文件权限的变化,此时若filemode=true
则会出现上述问题。
一种是一刀切的方案,关闭filemode
,即:
|
|
另一种精细化的方案,自然还是借助.gitattributes
进行配置:
|
|