前些天有位小伙伴告诉我说 git 改了某个重要文件的换行符,导致文件的哈希变了,于是文件校验出现错误。之前一直没问题而最近才有问题是因为最近换了部署服务器,git 的换行符配置不一样。
其实,我们不应该让代码仓库如此容易受到外界环境的影响。所以本文会解释 git 的全局配置如何影响了 git 对换行符的处理,然后说说如何彻底解决这个问题。
关于换行符
- \r = CR = Carriage-Return = 回车
- \n = LF = Line-Feed = 换行
- \r\n = CRLF = Carriage-Return Line-Feed = 回车换行
Windows 下默认的文本换行符是 \r\n
,Linux 下默认的换行符是 \n
,Mac 下默认的换行符是 \r
。因为这些差异,如果某部分文本文件会跨操作系统处理,那么换行符的处理就必须考虑了。git 允许开发者设置如何处理换行符在跨平台上的处理方式,不过不合适的设置可能带来文件发生不期望的修改。
问题
问题本身在本文一开始已经说得比较清楚了,现在疏理一下:
- 有个文本文件,被 git 改了换行符,导致哈希变化,文件校验出现了错误;
- 部署服务器以前 git 全局配置和现在不同,所以以前没问题,现在出了问题。
解决
当时,