【git系列4/4】如何设置core.autocrlf | core.safecrlf (配置值的含义及最佳实践)

关于core.autocrlf和core.safecrlf配置及其默认值(全网最全之一,翻查了许多资料)

一、git 配置的级别,如何新增、删除git配置,配置的覆盖关系、配置对应在什么目录

参考本人另外一篇文章:https://blog.csdn.net/w8y56f/article/details/126012346

二、关于换行符种类和安装 Git 的时候选择 core.autocrlf 的配置值

参考本人另外一篇文章:https://blog.csdn.net/w8y56f/article/details/126012369

三、仓库(GitHub)上的项目的文件是什么换行符?同一个文件可以有不同换行符吗?

参考本人另外一篇文章:https://blog.csdn.net/w8y56f/article/details/126023439

四、关于 core.autocrlf | core.safecrlf 及其默认值

结论:core.autocrlf 的默认值是false,core.safecrlf默认值是warn

* 对于Windows,安装的过程会让你选择core.autocrlf,如果你一直点击 "下一步" 指定的就是true。如果删掉这个system配置,表现出来的行为就是false
* 对于Windows对于core.safecrlf,安装过程不会指定,也查不到这个配置,默认值是warn。


参考资料:https://stackoverflow.com/questions/39408793/git-core-autocrlf-line-ending-default-setting
https://github.com/git/git/blob/936d1b989416a95f593bf81ccae8ac62cd83f279/environment.c#L48
https://github.com/git/git/blob/936d1b989416a95f593bf81ccae8ac62cd83f279/environment.c#L52

五、core.autocrlf | core.safecrlf 的行为

core.autocrlf
  true: 提交时改成LF,检出时改成CRLF
  input:提交时改成LF,检出时不改
  false:提交时是什么就是什么,不改换行符,检出时也不改  					(默认值)
  

core.safecrlf
  true: 拒绝提交包含混合换行符的文件		(会提示 Fatal:xxx)
  false: 允许提交包含混合换行符的文件 
  warn: 提交包含混合换行符的文件时给出警告		(默认值)

请仔细阅安装过程中的截图,这里已经很详细地解释了core.autocrlf的行为

在这里插入图片描述

六、设置 core.autocrlf | core.safecrlf 的最佳经验

6.1 core.autocrlf
  • 如果你用Windows就设置全局变量 git config --global core.autocrlf true (默认安装的时候会设置上去,不过最好显式指定)
  • 如果是mac/linux则设置 git config --global core.autocrlf input (默认安装的时候什么都没,默认是false,最好显示指定为input)

(强烈建议:显式指定配置值!显式指定!显式指定!显式指定!显式指定!显式指定!显式指定!)

6.2 core.safecrlf

对于这个配置,没什么推荐的。保持默认也是可以的。

6.3 为什么这么设置?

你能保证你的团队全部人都用Windows吗?现在能保证,未来能保证吗?你的程序部署到Windows服务器吗?
如果不能,最好的方案就是Windows用户设置全局变量core.autocrlf=true,Mac/Linux用户设置为 core.autocrlf=input,这样提交到远程仓库的都统一是LF,然后clone下来的又是各自平台的。

对于你公司的已有的代码,其实挺麻烦的,可能存在以前不规范导致仓库上的代码会出现部分CRLF部分LF的情况,所以这些事情一开始就要做好,否则补救的代价就很大了

思考

对于core.autocrlf 的设计,可以从这些值true、false、input三个值观察到,其实设计者都是站在仓库要保存LF这种角度去设计的。比如

对于Windows:仓库保存为LF,你设置为true,就可以保证检出的时候转为CRLF这种Windows所特殊的,而在提交的时候又转为LF仓库的

对于Mac/Linux:仓库保存为LF,设置为input的值,检出的时候不变,即依然得到的是LF,提交的时候转为LF,这样依然能够统一到LF

其实我个人觉得外国人的思维和我们真的很不一样,让我来设计,可能真的不会设计出这些这么难记忆的选项值。

我可能就设计为
crlf_lf:检出转为crlf,提交转为lf (适合Windows系统)
lf_lf:检出转为lf,提交也转为lf (适合mac、linux、unix系统)
cr_lf:检出转为cr,提交也转为lf (适合早期的mac系统,早期mac用cr作为换行符,后统一为lf)
none:检出和提交都不改变
我这个设计也是站在仓库只保存lf的角度去设计这几个配置值

根据引用\[1\]中的内容,如果你使用Windows系统,可以通过设置全局变量来设置gitcore.autocrlf属性。可以使用以下命令来设置git config --global core.autocrlf true。这将确保在提交代码时,git会自动将行尾符转换为Windows格式。如果你使用的是macOS或Linux系统,可以使用以下命令来设置git config --global core.autocrlf input。这将确保在提交代码时,git会将行尾符保持为输入时的格式。请注意,这些设置在默认安装时可能已经设置好了,但最好还是显式指定一下。 #### 引用[.reference_title] - *1* [【git系列4/4】如何设置core.autocrlf | core.safecrlf配置含义最佳实践)](https://blog.csdn.net/w8y56f/article/details/126027361)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Git第六讲 本地配置Git与中文乱码解决](https://blog.csdn.net/huanglu0314/article/details/111195141)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [【Git】简单使用Git](https://blog.csdn.net/Moluuu/article/details/113732861)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值