背景:
使用虚拟机共享windows文件夹,文件夹中用git clone 一个仓库。在linux下编辑文件,用git status发现几乎所有的文件都为修改状态。
 
原因:
windows下和linux下的文本文件的换行符不一致。
windows:两个字符,CR+LF,即一个回车,一个换行
linux及OS X:一个字符,LF,在Linux下查看文件如下所示,多了个^M

思考:
仓库中是Linux下提交的代码,那么应该是LF结尾的,那么windows下clone下来的应该也是LF结尾才对。那么是什么导致windows下变为CRLF格式结尾呢?
答:是因为git的一个设置导致的。core.autocrlf。
在windows下,git安装时,默认该选项为true,那么效果是从仓库下载下来,结尾会改为CRLF格式。当提交文件到仓库时,会将CRLF格式转为LF。那么是可以保证仓库中的文件是LF结尾的。这样Linux下编辑和windows下编辑都不影响了。
 
结论:
也就是说,我用不同的git设置,操作了同一个文件夹,那么表现肯定就不一样了。
windows下面设置该项为true到底好不好,好像是方便了windows开发者,但这种同一个文件夹如果拷贝到Linux系统或者苹果下面去,就会有问题了。
 
最佳实践:
现在主流编辑器都能够自动识别换行符为LF还是CRLF,如VS code,Notepad++等等。
个人认为windows下开发将编辑器默认设置为LF格式,git 该项设置为false是最好了。

如VSCode,在settings中设置file:eol 选项为\n
 

参考链接:

git设置core.autocrlf的更多相关文章

  1. git core.autocrlf配置 解决Windows和Linux(Mac)换行问题

    格式化 格式化是许多开发人员在协作时,特别是在跨平台情况下,遇到的令人头疼的细小问题. 由于编辑器的不同或者Windows程序员在跨平台项目中的文件行尾加入了回车换行符, 一些细微的空格变化会不经意地 ...

  2. git core.autocrlf配置说明

    格式化 格式化是许多开发人员在协作时,特别是在跨平台情况下,遇到的令人头疼的细小问题. 由于编辑器的不同或者Windows程序员在跨平台项目中的文件行尾加入了回车换行符, 一些细微的空格变化会不经意地 ...

  3. git config --global core.autocrlf false

    git config --global core.autocrlf  false warning: LF will be replaced by CRLF in .idea/vcs.xml.The f ...

  4. Git中的core.autocrlf选项

    项目的开发环境为Windows,在Linux环境下编译,使用Git进行版本控制. 在安装好Git和TortoiseGit后,从远端clone,遇到一个奇怪的问题,Shell脚本中的LF总是被替换成了C ...

  5. Git中的AutoCRLF与SafeCRLF换行符问题

    最近在使用GitHub,发现不时没有修改过的文件要提交,对比发现文件全部修改,但找不到不一样的地方.想可能是换行符的问题,因为Windows和Linux的换行符不一样,而Git默认应该是Linux的, ...

  6. git 设置

    系统乱码 项目中的编码统一设置为UTF-8编码. 设置系统的语言设置为 zh_UTF-8,把 export LANG=zh_CN.UTF-8 保存到~/.profile文件里. $ env|grep ...

  7. Windows下git设置代理服务器

    SVN中,使用TortoiseSVN来进行版本控制时,设置代理非常简单,只需要在设置里面添加代理的信息即可.而 git 在GUI(v0.17.GITGUI)中却无法找到类似的设置,只能求助 git b ...

  8. git 设置多项目实现多账号登陆

    9:45 2015/11/18git 设置多项目时实现多账号用户登陆git config --global user.name "your_name" git config --g ...

  9. 设置core环境

    void dummy_function (void){ unsigned char *ptr = 0x00; *ptr = 0x00;} int main (void){ dummy_function ...

随机推荐

  1. [GO]匿名函数和defer

    package main import "fmt" func main() { a := 10 b := 20 defer func() { fmt.Printf("a ...

  2. IIS8如何安装和使用URL重写工具-URL Rewrite

    下载和安装URL Rewrite IIS8默认是没有安装URL重写工具的,必须要自己下载安装. 如果IIS上默认有安装Web平台安装程序,我们可以使用平台自动安装URL Rewrite重写工具,打开I ...

  3. Android-原生对话框

    package liudeli.ui.all; import android.app.Activity; import android.app.AlertDialog; import android. ...

  4. C#判断一个字符串是否是数字或者含有某个数字

    第一种就是 最常见的 用Try..Catch.. 再try中强转你要确认的string 类型 成功就是int  catch 就不是 string a = "avdfd"; try ...

  5. 21天学通C++学习笔记(八):指针和引用

    1. 简述 C++最大的优点之一是,既可以用它来编写不依赖于机器(主要是内存)的高级应用程序,又可以用它来编写与硬件紧密协作的应用程序. 事实上C++让您能够在字节和比特级调整应用程序的性能,而要编写 ...

  6. LightOJ 1234 Harmonic Number(打表 + 技巧)

    http://lightoj.com/volume_showproblem.php?problem=1234 Harmonic Number Time Limit:3000MS     Memory ...

  7. vs 页面浏览不显示.aspx后缀名

    转:http://www.cnblogs.com/hllive/p/6029763.html 由vs2013新建“web窗体应用程序”的网站,URL不显示扩展名.那今天就实现该功能 1.首先打开vs2 ...

  8. hihocoder1634 Puzzle Game

    题目链接:(vjudge) 戳我 和上面那个matrix 比较像. 大概题意就是给你一个n*m的矩阵,然后可以选择其中一个数字进行修改(当然也可以不修改),使得矩阵的最大子矩阵尽可能小.最后输出这个值 ...

  9. python urllib2 对 http 的 get,put,post,delete

    #GET: #!/usr/bin/env python# -*- coding:utf-8 -*-import urllib2def get():    URL = 'www.baidu.com'   ...

  10. Django-03视图层

    5.1 视图函数 一个视图函数,简称视图,是一个简单的Python 函数,它接受Web请求并且返回Web响应.响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片 ...