GitHub 第一坑:换行符自动转换

转载: @换行符自动转换

问题描述

多平台共同开发时,使用的gitlab托管代码,Clone或者Pull下来的代码存在换行符问题,导致脚本使用无法在cygwin运行。

总结:

  1. 换行符:
  • UNIX/Linux : LF (0x0A),'\n'
  • Mac OS : LF (0x0A),之前是CR (0x0D)。
  • DOS/Windows: CRLF(0x0D0A) '\r\n'

查看方式:使用 Notepad++打开文件,点击小图标“显示所有字符”

CR用符号'\r'表示, 十进制ASCII代码是13, 十六进制代码为0x0D;
LF使用'\n'符号表示, ASCII代码是10, 十六制为0x0A. 所以Windows平台上换行在文本文件中是使用 0d 0a 两个字节表示, 而UNIX和苹果平台上换行则是使用0a或0d一个字节表示

QQ图片20170922154346.png
GitHub 第一坑:换行符自动转换_第1张图片
QQ图片20170922154726.png
  1. git智能转换
  • 自动模式
  • 当你在签出文件时,它试图将 UNIX 换行符(LF)替换为 Windows 的换行符(CRLF);当你在提交文件时,它又试图将 CRLF 替换为 LF。保持仓库内文件的一致性(UNIX 风格)
  1. 问题发生:
    在windows环境下,当Clone或Pull下来的代码,自动将文件换行符改成了CRLF,包括SHELL脚本,但是我们项目中是使用cygwin运行脚本的,这会导致换行符问题:
GitHub 第一坑:换行符自动转换_第2张图片
QQ截图20170922183813.png

打开build.sh,发现所有的换行符都是CRLF;

解决问题

  1. 修改GIT配置
  • GIT 命令:


    GitHub 第一坑:换行符自动转换_第3张图片
    QQ截图20170922184311.png

先设置不自动转换,
再添加换行符检查功能,在提交代码时,当发现混用时,就不提交代码

  • 如果使用的TortoiseGit的话,可以这样设置:
GitHub 第一坑:换行符自动转换_第4张图片
QQ截图20170922184927.png
  1. 当在提交代码时,出现混用的话,可以将文件改成unix形式,使用命令dos2Unix命令:
    测试:在windows下创建一个文件,使用dos2Unix转换:
GitHub 第一坑:换行符自动转换_第5张图片
QQ截图20170922185452.png

转换后:

GitHub 第一坑:换行符自动转换_第6张图片
QQ截图20170922185609.png

已经将CRLF变成LF

你可能感兴趣的:(GitHub 第一坑:换行符自动转换)