PS:最近又换回了 Linux Mint,作为一个 Linux 桌面黑,有点尴尬。。。:)

换行符是 *nux 与 Windows 系及其他系的各种不兼容问题的代表之一,于是,在不同平台使用 Git 时经常碰到 git status 列出一大串修改过的文件,git diff 查看一下其实只是换行符问题。不多扯了,直接上解决方案:

方案1: 增加 .gitattribute 文件

在 repo 目录下新建 .gitattribute 文件,内容为:

* text eol=lf

方案2: 修改 Git 配置

git config --global core.autocrlf false
git config --global core.safecrlf true

如果只需要修改当前仓库,去掉 --global

方案3: 行政命令

下令:一律使用 unix 换行符,违者男的穿裙子,女的不许穿!

参考:


问题:

Windows 下使用 git 没问题,在 Cygwin 中出现文件全部被修改问题。运行 git diff 看到变化是 ^M,即 Linux 与 Win 的换行符区别。

解决:

 git config --global core.autocrlf true

关于换行符 Git 有两个重要的配置,如下:

换行符的问题 autocrlf and safecrlf

Windows(rn)、Linux(n)和MacOS(r)三个主流系统的换行符各不相同,这样在跨平台合作的时候就容易出现换行符的问题。 Git 提供了 autocrlfsafecrlf 两个参数来解决这个问题。但这两个参数如果没用好,就会影响开发。

例如,出现这种情况: A和B两个开发人员,A使用LF(n)做换行符,B使用CRLF(rn)做换行符,且都没有开启 autocrlf 参数,那么A在迁出B的文件,并使用自己的编辑器打开之后就会发现,虽然没有对文件做任何修改,但它的状态是modified。这是由于A的编辑器自动将B的文件中的所有换行符替换成了(LF),这与版本库中的(CRLF)不同。 让我们来看看 autocrlf 参数的作用:

# 签出时将换行符转换成CRLF,签入时转换回 LF。
 git config --global core.autocrlf true  

#签出时不转换换行符,签入时转换回 LF 
git config --global core.autocrlf input   

#签出签入均不转换 
git config --global core.autocrlf false

这些选项在TorgoiseGit中也可以设置。 我的建议是在无论在什么系统下编程,都把所有人的编辑器的换行符模式设置成Unix格式,然后把autocrlf设置成false,这样一劳永逸。 毕竟除了Windows记事本这类软件外,已经很少有文本编辑器不支持换行符设置了。 如果你把换行符搞乱了,在一个文件中既包含windows风格的换行符也包含unix风格换行符,那么 safecrlf 就可以发挥作用了:

# 拒绝提交包含混合换行符的文件 
git config --global core.safecrlf true   

# 允许提交包含混合换行符的文件 
git config --global core.safecrlf false   

# 提交包含混合换行符的文件时候给出警示 
git config --global core.safecrlf warn

参考资料: http://blog.sina.com.cn/s/blog_96ae64bd0101hfdf.html

标签: git

添加新评论