gitattributes配置文件的作用
0 Preface/Foreword
0.1 基本概念
Git版本管控工具功能强大,在使用过程中,在多人合作的项目开发过程中,经常会遇到提交代码时出现的warning提醒,尤其是换行符。
Linux/Unix/Mac OS操作系统的换行符使用LF符号(\n),而Windows使用CR(\r)LF(\n)作为换行符。
CR:Carriage Return,回车,ASCII码0x0D,Ctrl为 ^M
LF:Line Feed,换行,ASCII码0x0A,Ctrl为^J
影响换行符的几个因素:
- 操作系统(平台)
- 编辑器(尤其是Windows平台下的编辑器)
- core.autocrlf 变量设置, true, false, input
core.autocrlf不同值的作用:
- true,最终提交到代码库中时,所有文件都认为是text,把所有CRLF转成LF。checkout时,全都转为CRLF;(git add的过程中,会强制将LF转成CRLF; git commit时,强制将CRLF 转成LF)(推荐在Windows中使用,适合多平台协作)
- false,最终提交到代码库中时,保持原来text内容。CRLF还是CRLF,LF还是LF。(适合纯Windows)
- input,最终提交到代码库中时,所有CRLF转成LF。checkout时,保持LF或者CRLF(不转换)。(推荐在Linux/Unix下使用,适合纯Linux/Mac OS)
core.safecrlf不同值的作用:
- true,若有mixed line endings,无法提交,fatal错误
- false,允许提交包含混合line endings的文件
- warn,只是警告,仍然可以提交
core.eol的值类型:当且仅当core.autocrlf为false时,core.eol设置才有效
- lf
- crlf
- native,根据平台,自动转换
Git版本管控的几个区域:
- 工作区, working directory,检出(git checkout <branch>)到对应的分支
- 暂存区,stage/index,通过git add 添加修改过的文件,git add的动作就是将文件修改放入到了暂存区
- 本地版本库,commit history, 通过git commit动作,提交成功后,对应的文件会放入版本库中
- 远程版本库,通过git push动作,将本地版本库更新到远程库
0.2 git 变量查看和设置
0.2.1 查看autocrlf
git config core.autocrlf
0.2.2 查看safecrlf
git config core.safecrlf
0.2.3 查看eol
git config core.eol
1 Usage
使用方法可参考文章:
Configuring Git to handle line endings - GitHub Docs
[转载]通过阅读 git-config 文档理解 Git 如何使用autocrlf、safecrlf、eol和.gitattributes处理line-ending - 简书
Git提示“warning: LF will be replaced by CRLF”最详细解释+解决方案-CSDN博客
git如何避免”warning: LF will be replaced by CRLF“提示? - 知乎
https://docs.github.com/zh/get-started/getting-started-with-git/configuring-git-to-handle-line-endings?platform=windows
.gitattributes 作用详细讲解(git大佬必会技能) - 代码先锋网
1.1 Warning
warning: LF will be replaced by CRLF in xxx file
The file will have its origninal line endings in your working directory.
1.2 添加.gitattributes文件
.gitattributes中的内容会覆盖 core.autocrlf的设置,大多数情况下使用配置文件来设置不同文件的line endings。
除了用命令行设置core.autocrlf,还可以用.gitattributes文件管理Git读取特定存储中的行结束符的方式。该文件提交到存储库时,它将覆盖所有存储库贡献者的core.autocrlf设置。可以确保所有用户的行为一致,而不管其他Git设置和环境如何。
# Set the default behavior, in case people don't have core.autocrlf set. * text=auto #文件的行尾自动转换。如果是文本文件,文件入Git库时,行尾自动转为LF。若在库中的文件行尾是CRLF,则文件在入库时,不再转为LF。# Explicitly declare text files you want to always be normalized and converted # to native line endings on checkout. *.c text *.h text #对于txt文件,标记为文本文件,并进行行尾规范化。# Declare files that will always have CRLF line endings on checkout *.uvprojx text eol=lf #对于.uvprojx标记为文本文件,在文件入库时进行规范化,行尾转成LF;检出是也保持LF。#Explicitly declare files you want to always be normalized and converted # to LF line endings on checkout *.py eol=lf #对于py文件,只针对工作目录中的文件,行尾设置为LF#Denote all files that are truly binary and should not be modified.*.bin binary
*.jpg binary
#对于.bin 和 .jpg文件,表示二级制文件,检出是不修改
NOTE:可以发现,文件是匹配的,用*.c、*.uvprojx、*.bin(用空格分隔),然后给定一个设置,即为text、text eof=lf、binary。
- text=auto Git将以其认为的最佳方式处理文件。这是一个合适的默认选项。
- 在检出时 text eol=lf Git将始终把行结束符转换为LF,该场景用于必须保持LF结束符的文件,即使在Windows上。
- 在检出时text eol=crlf Git将始终把行结束符转换为CRLF,该场景用于必须保持CRLF结束符文件,即使在Linux或OSX上。
- binary Git会理解指定文件不是文本,并且不应尝试更改该文件。该binary设置也是-text -diff的别名
更改行结束符后刷新仓库注意事项如下:
当.gitattributes文件已经提交到代码库中时,为了让该文件可以在所有开发者本地工作路径都能生效,可以根据以下动作进行:
- 在本地拉取最新代码,git pull
- git rm --cached -rf
- git reset --hard HEAD
1.2.1 .gitattributes介绍
.gitattributes是一个文本文件,文件中的一行定义一个路径的若干个属性,主要目的是用来定义每种文件的属性,方便git帮助统一管理。
.gitattributes文件格式:
需要匹配的文件模式 属性1 属性2 ...
在该文件每一行中,一个属性(以text为例) 可能有4种状态:
- 设置 text
- 不设置 -text
- 设置值 text=auto
- 未声明,通常不出现该属性即可;但是为了覆盖其他文件中的声明,也可以用 !text
.gitattributes中可以定义的属性包括(持续更新中):
- text,用于控制line endings的规范性。如果一个文本文件是规范的,则Git库汇总该文件(Git服务器中的文件)的行尾总是LF。
- eol,设置行尾字符,eol=lf,入库时将行尾规范为LF,检出时行尾为LF; eol=crlf,入库时行尾规范为LF,检出时将行尾设置为CRLF
- diff,告诉git声明文件需要比较版本差异
- binary,二进制文件
- merge,合并策略
diff属性:
diff状态描述如下:
- diff 强制视为文本文件,即使包含一些通常从不出现在文本文件的字节值,比如NULL
- !diff 表示为非文本文件
- 未定义
1.2.2 .gitattributes生效顺序
生效顺序如下:
- 项目中有多个.gitattributes文件情况,远离根目录的文件优先级越高(生效)。
- 同一个.gitattributes文件情况,遵循覆盖原则,后面的行会覆盖前面的设置,如果一个文件的某个属性被多次设置,则后设置的优先。
1.2.3 text 和eol的区别
参考文献:git - What does "!eol" in gitattributes do? - Stack Overflow
Git有两个属性处理行尾。(Git has 2 attributes that deal with end-of-lines)
Text:
Documentation says:
This attribute enables and controls end-of-line normalization.When a text file is normalized, its line endings are converted to LF in the repository.
This effectively means that when you commit to the repo, it will convert line-endings to LF.
eol:
Documentation says:
This attribute sets a specific line-endings style to be used in the working directory. It enables end-of-line normalization without any content checks, effectively setting the text attribute.
So while the text attribute affects how the file will look like IN THE REPO, eol affects how the file looks like in the working directory.
An attribute can have 4 states:
- text,set with no value
- -text,unset
- text=auto,set with specific value, this setting means you let Git decide if a file is text and if it is it will normalize it (set line-endings in the repo to LF)
- !text,unspecified
!eol:
!eof means that the attribute eol is set to unspecified explicitly, in this case it is the same as not specifying it at all, instructing Git to look at the core.autocrlf and core.eol configuration settings to see how to deal with line-endings in the working directory. Note this :
The core.eol configuration variable controls which line endings Git will use for normalized files in your working directory; the default is to use the native line ending for your platform, or CRLF is core.autocrlf is set.
1.3 常用template(.gitattributes)
# Help git with file types
* text=auto
*.o binary
*.obj binary
*.bin binary
*.lib binary
*.mbn binary
*.svf binary# Always use LF EOL on shell script files, otherwise Docker cannot run scripts
# in a folder mapped from Windows into the Docker container.
*.sh eol=lf# Documentation files are often changed in multiple concurrent branches.
# Use git union strategy when merging, so it keeps both side's modifications
# without conflicts.
README.md merge=union
CHANGELOG.md merge=union
RELEASENOTES.md merge=union
1.4 格式统一转换工具 (unix2dos & dos2unix)
在Windows平台,可以用unix2dos工具将指定文件的line endings转换成适合Windows平台的CRLF。
反之亦然,可以用dos2unix工具将指定文件的line endings转成适合Linux/unix平台的LF。
查看工具版本:
1.5 查看文本文件的换行符
1.5.1 Linux系统中Vim
用VIM编辑文本,保存后,字符总数比实际字符多一个,这是为什么?
因为:VIM等工具,会默认在文件末尾添加一个换行符'\n',不管当前需不需要换行。
查看字符数量工具:wc
常用选项:
- -c ,统计字节个数
- -m,统计字符个数
- -l,统计换行符个数
1.5.2 hexdump工具
hexdump工具可以用来查看文件中所有字符内容,包括invisible character。
hexdump -c file_name
可以发现,3.txt文件,末尾有一个换行符0a,显示出来就是一个黑点。
1.5.3 裁剪文件工具truncate
truncate工具 可以用来将裁剪文件大小。
1.5.4 查看文件类型file
利用file命令,也可初步得知文本是否包含换行符及换行符的类型。
1.5.5 文件属性
NOTE:如果文件文件已经包含了换行(CRLF或者LF),不管是在windows下还是Linux进行编辑,换行符都会与原始值保持一致(编辑器自动识别功能)。
1.5.6 Notepad++设置eol格式
Edit > EOL conversion >
1. 5.7 cat -e
1.5.8 od -c
相关文章:

gitattributes配置文件的作用
0 Preface/Foreword 0.1 基本概念 Git版本管控工具功能强大,在使用过程中,在多人合作的项目开发过程中,经常会遇到提交代码时出现的warning提醒,尤其是换行符。 Linux/Unix/Mac OS操作系统的换行符使用LF符号(\n&am…...

【华为鸿蒙系统学习】- 如何利用鸿蒙系统进行App项目开发|自学篇
🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 💫个人格言:"没有罗马,那就自己创造罗马~" 目录 创建鸿蒙第一个App项目 项目创建 工程目录区 预览区 运行Hello World 基本工程目录 ws:工程…...
基于SpringBoot的足球社区管理系统
文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于SpringBoot的足球社区管理系统,java…...
ubuntu22.04上安装charles-proxy
在 Ubuntu 22.04 上安装 .tar.gz 格式的 Charles Proxy (charles-proxy-4.6.5_amd64.tar.gz) 需要解压缩文件并运行其中的安装脚本或可执行文件。以下是具体步骤: 1. 下载文件 假设你已经从 Charles Proxy 官网下载了 charles-proxy-4.6.5_amd64.tar.gz 文件。 2…...

(2021|CVPR,XMC-GAN,对比学习,注意力自调制)用于文本到图像生成的跨模态对比学习
Cross-Modal Contrastive Learning for Text-to-Image Generation 公众:EDPJ(添加 VX:CV_EDPJ 或直接进 Q 交流群:922230617 获取资料) 目录 0. 摘要 1. 简介 2. 相关工作 3. 基础 4. 方法 4.1 用于文本到图像…...
【Linux基本命令】
文章目录 一. Linux基本命令第三回二. 结束语 一. Linux基本命令第三回 cal指令,命令格式:cal 【参数】【月份】【年份】 功能,用于查看日历等时间信息,如只有一个参数,则表示年份,有两个参数则表示月份和…...

Wi-Fi、蓝牙、ZigBee等多类型无线连接方式的安全物联网网关设计
随着物联网和云计算技术的飞速发展.物联网终端的数量越来越多,终端的连接方式也更趋多样化,比如 Wi-Fi蓝牙和 ZigBee 等。现有的物联网网关大多仅支持一种或者几种终端的接人方式。无法满足终端异构性的需求。同时,现有的物联网网关与终端设备…...

华清远见嵌入式学习——ARM——作业4
作业要求: 代码运行效果图: 代码: do_irq.c: #include "key_it.h" extern void printf(const char *fmt, ...); unsigned int i 0;//延时函数 void delay(int ms) {int i,j;for(i0;i<ms;i){for(j0;j<2000;j);} }void do_i…...

25. K 个一组翻转链表
题解参考:https://leetcode.cn/problems/reverse-nodes-in-k-group/solutions/10416/tu-jie-kge-yi-zu-fan-zhuan-lian-biao-by-user7208t/ 设置dummy虚拟头节点,pre为待翻转部分的前驱(用于连接),end为待翻转部分中的…...
jQuery的事件-动画-AJAX和插件
一、jQuery事件处理 1.认识事件(Event) Web页面经常需要和用户之间进行交互,而交互的过程中我们可能想要捕捉这个交互的过程: 比如用户点击了某个按钮、用户在输入框里面输入了某个文本、用户鼠标经过了某个位置;浏…...

【开源】基于JAVA语言的企业项目合同信息系统
目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 合同审批模块2.3 合同签订模块2.4 合同预警模块2.5 数据可视化模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 合同审批表3.2.2 合同签订表3.2.3 合同预警表 四、系统展示五、核心代码5.1 查询合同…...

遗传算法的应用——求解一元函数的极值
遗传算法的应用——求解一元函数的极值 1 基本概念2 预备知识3.1 模拟二进制转化为十进制的方法3.2 轮盘赌选择算法 3 问题4 Matlab代码5 运行效果6 总结 1 基本概念 遗传算法(Genetic Algorithm,GA)是模拟生物在自然环境中遗传和进化过程从而形成的随机全局搜索和优化方法&am…...

Power BI 学习
数据获取 数据清洗 对导入的数据进行数据整理的过程一般称为「数据清洗」,之所以称之为清洗,是因为在数据分析师眼中,杂乱的数据就是脏数据,只有被清洗成干净的数据后才可以进行分析使用。 数据丰富 操作 1.复制列 点击列名选…...

PPT中加入页码
PPT中加入页码 文章目录 简单版本样式更改 简单版本 PPT中插入页码,基础的就是在“插入”选项卡中单机“幻灯片编号”即可 样式更改 然而,就像我们做幻灯片不满足于白底黑字一样,页码也总不能是默认的样式。 比如,在页码下面…...
xxl-job使用笔记
文章目录 xxl-job配置文件新增XxlJobConfig类JobHandler例子xxl-job机制xxl-job-admin配置XxlJob 和 JobHandler(过时了) 其他报错 msg:job handler [demoJobHandler] not found.xxl-job报错 xxl-job registry fail, registryParam:RegistryParam{registryGroup‘EX…...

微短剧,会成为长视频的“救命稻草”吗?
职场社畜秒变霸道总裁,普通女孩穿越成为艳丽皇妃.......这样“狗血”的微短剧,最近不仅在国内各大视频平台上异常火爆,而且还直接火出了国外。 所谓微短剧,就是单集时长从几十秒到十几分钟的剧集,有着相对明确的主题和…...

web架构师编辑器内容-创建业务组件和编辑器基本行为
编辑器主要分为三部分,左侧是组件模板库,中间是画布区域,右侧是面板设置区域。 左侧是预设各种组件模板进行添加 中间是使用交互手段来更新元素的值 右侧是使用表单的方式来更新元素的值。 大致效果: 左侧组件模板库 最初的模板…...

力扣刷题记录(18)LeetCode:474、518、377、322
目录 474. 一和零 518. 零钱兑换 II 377. 组合总和 Ⅳ 322. 零钱兑换 总结: 474. 一和零 这道题和前面的思路一样,就是需要将背包扩展到二维。 class Solution { public:int findMaxForm(vector<string>& strs, int m, int n) {vector&l…...
MongoDB创建和查询视图(一)
目录 限制和注意事项 应用两种方式创建视图 本文整理mongodb的官方文档,介绍mongodb的视图创建和查询。 Mongodb中,允许使用两种方式来创建视图。 //使用db.createCollection()来创建视图 db.createCollection("<viewName>",{"…...
paddle 53 基于PaddleClas2.5训练自己的数据(训练|验证|推理|c++ 部署)
项目地址:https://github.com/PaddlePaddle/PaddleClas 文档地址:https://paddleclas.readthedocs.io/zh-cn/latest/tutorials/install.html paddleclas的最新项目已经不适应其官网的使用案例(训练、验证、推理命令均不适用),为此博主对其进行命令重新进行修改。同时padd…...
Java 语言特性(面试系列1)
一、面向对象编程 1. 封装(Encapsulation) 定义:将数据(属性)和操作数据的方法绑定在一起,通过访问控制符(private、protected、public)隐藏内部实现细节。示例: public …...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...

【项目实战】通过多模态+LangGraph实现PPT生成助手
PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...

(二)原型模式
原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...
Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器
第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...

C++ 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...

《基于Apache Flink的流处理》笔记
思维导图 1-3 章 4-7章 8-11 章 参考资料 源码: https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...

Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...

10-Oracle 23 ai Vector Search 概述和参数
一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI,使用客户端或是内部自己搭建集成大模型的终端,加速与大型语言模型(LLM)的结合,同时使用检索增强生成(Retrieval Augmented Generation &#…...