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