zoukankan      html  css  js  c++  java
  • Git中的AutoCRLF与SafeCRLF换行符问题

    背景介绍

            最近在做CICD的时候遇到了一个问题,简单来说就是,git根目录下有个文件,编译代码后大小是25Kb,提交后重新clone最新代码文件变成26kb且用这个文件打包发布有问题。

    考虑到可能不是文本级的差异,使用了Beyond Compare进行十六进制比较。

    确实还是有差异的,左侧部分多出很多0D,十六进制中0D代表回车、换行符。于是百度 “git 换行符” 找到解释与方案如下:

    在各操作系统下,文本文件所使用的换行符是不一样的。UNIX/Linux 使用的是 0x0A(LF),早期的 Mac OS 使用的是0x0D(CR),后来的 OS X 在更换内核后与 UNIX 保持一致了。但 DOS/Windows 一直使用 0x0D0A(CRLF)作为换行符。Git提供了一个“换行符自动转换”功能。这个功能默认处于“自动模式”,当你在签出文件时,它试图将 UNIX 换行符(LF)替换为 Windows 的换行符(CRLF);当你在提交文件时,它又试图将 CRLF 替换为 LF。Git 的“换行符自动转换”功能听起来似乎很智能、很贴心,因为它试图一方面保持仓库内文件的一致性(UNIX 风格),一方面又保证本地文件的兼容性(Windows 风格)。

    使用cmd命令关闭自动模式

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

    参考内容:http://www.cnblogs.com/sdgf/p/6237847.html

             http://www.cnblogs.com/flying_bat/p/3324769.html

             http://blog.csdn.net/igorzhang/article/details/17420949

    重新clone最新代码,文件大小变为25kb与编译后一致,问题解决。然鹅事情并没有这么简单为虚拟机做同样设置手重新测试jenkins时发现,workspace下的最新代码依然是26kb;测试用git clone最新代码发现是25kb说明命令是生效的,但是好像没有影响到jenkins

    经过漫长的搜索,找到如下帖子

    链接: https://issues.jenkins-ci.org/browse/JENKINS-21088

    前辈的经验告诉我们,看来单单通过配置git参数,不能完全解决这个问题,于是尝试创建了.gitattributes 文件,注意需创建到项目在git的根目录中。创建完成后Commit and push

     .gitattributes 文件内容如下:

    # Set the default behavior, in case people don't have core.autocrlf set.
    * text=auto
    
    # Explicitly declare text files you want to always be normalized and converted
    # to native line endings on checkout.
    *.c text
    *.h text
    *.profile -text
    
    # Declare files that will always have CRLF line endings on checkout.
    *.sln text eol=crlf

    重新测试jenkins发现workspace下的文件已变为25kb,问题解决。

    END

  • 相关阅读:
    Lambda
    Thread&线程池
    异常
    Map
    List and Set
    Collection和迭代器Iterator
    Object类,常用API
    (一)自定义 mybatis 之框架介绍
    Nginx三大功能及高并发分流
    http协议改为https
  • 原文地址:https://www.cnblogs.com/JooJoBlogs/p/10456342.html
Copyright © 2011-2022 走看看