当前位置: 首页 > news >正文

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版本管控工具功能强大&#xff0c;在使用过程中&#xff0c;在多人合作的项目开发过程中&#xff0c;经常会遇到提交代码时出现的warning提醒&#xff0c;尤其是换行符。 Linux/Unix/Mac OS操作系统的换行符使用LF符号&#xff08;\n&am…...

【华为鸿蒙系统学习】- 如何利用鸿蒙系统进行App项目开发|自学篇

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 &#x1f4ab;个人格言:"没有罗马,那就自己创造罗马~" 目录 创建鸿蒙第一个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) 需要解压缩文件并运行其中的安装脚本或可执行文件。以下是具体步骤&#xff1a; 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 公众&#xff1a;EDPJ&#xff08;添加 VX&#xff1a;CV_EDPJ 或直接进 Q 交流群&#xff1a;922230617 获取资料&#xff09; 目录 0. 摘要 1. 简介 2. 相关工作 3. 基础 4. 方法 4.1 用于文本到图像…...

【Linux基本命令】

文章目录 一. Linux基本命令第三回二. 结束语 一. Linux基本命令第三回 cal指令&#xff0c;命令格式&#xff1a;cal 【参数】【月份】【年份】 功能&#xff0c;用于查看日历等时间信息&#xff0c;如只有一个参数&#xff0c;则表示年份&#xff0c;有两个参数则表示月份和…...

Wi-Fi、蓝牙、ZigBee等多类型无线连接方式的安全物联网网关设计

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

华清远见嵌入式学习——ARM——作业4

作业要求&#xff1a; 代码运行效果图&#xff1a; 代码&#xff1a; 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 个一组翻转链表

题解参考&#xff1a;https://leetcode.cn/problems/reverse-nodes-in-k-group/solutions/10416/tu-jie-kge-yi-zu-fan-zhuan-lian-biao-by-user7208t/ 设置dummy虚拟头节点&#xff0c;pre为待翻转部分的前驱&#xff08;用于连接&#xff09;&#xff0c;end为待翻转部分中的…...

jQuery的事件-动画-AJAX和插件

一、jQuery事件处理 1.认识事件&#xff08;Event&#xff09; Web页面经常需要和用户之间进行交互&#xff0c;而交互的过程中我们可能想要捕捉这个交互的过程&#xff1a; 比如用户点击了某个按钮、用户在输入框里面输入了某个文本、用户鼠标经过了某个位置&#xff1b;浏…...

【开源】基于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 学习

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

PPT中加入页码

PPT中加入页码 文章目录 简单版本样式更改 简单版本 PPT中插入页码&#xff0c;基础的就是在“插入”选项卡中单机“幻灯片编号”即可 样式更改 然而&#xff0c;就像我们做幻灯片不满足于白底黑字一样&#xff0c;页码也总不能是默认的样式。 比如&#xff0c;在页码下面…...

xxl-job使用笔记

文章目录 xxl-job配置文件新增XxlJobConfig类JobHandler例子xxl-job机制xxl-job-admin配置XxlJob 和 JobHandler(过时了) 其他报错 msg&#xff1a;job handler [demoJobHandler] not found.xxl-job报错 xxl-job registry fail, registryParam:RegistryParam{registryGroup‘EX…...

微短剧,会成为长视频的“救命稻草”吗?

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

web架构师编辑器内容-创建业务组件和编辑器基本行为

编辑器主要分为三部分&#xff0c;左侧是组件模板库&#xff0c;中间是画布区域&#xff0c;右侧是面板设置区域。 左侧是预设各种组件模板进行添加 中间是使用交互手段来更新元素的值 右侧是使用表单的方式来更新元素的值。 大致效果&#xff1a; 左侧组件模板库 最初的模板…...

力扣刷题记录(18)LeetCode:474、518、377、322

目录 474. 一和零 518. 零钱兑换 II 377. 组合总和 Ⅳ 322. 零钱兑换 总结&#xff1a; 474. 一和零 这道题和前面的思路一样&#xff0c;就是需要将背包扩展到二维。 class Solution { public:int findMaxForm(vector<string>& strs, int m, int n) {vector&l…...

MongoDB创建和查询视图(一)

目录 限制和注意事项 应用两种方式创建视图 本文整理mongodb的官方文档&#xff0c;介绍mongodb的视图创建和查询。 Mongodb中&#xff0c;允许使用两种方式来创建视图。 //使用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…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例

文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具

文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

【项目实战】通过多模态+LangGraph实现PPT生成助手

PPT自动生成系统 基于LangGraph的PPT自动生成系统&#xff0c;可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析&#xff1a;自动解析Markdown文档结构PPT模板分析&#xff1a;分析PPT模板的布局和风格智能布局决策&#xff1a;匹配内容与合适的PPT布局自动…...

【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验

系列回顾&#xff1a; 在上一篇中&#xff0c;我们成功地为应用集成了数据库&#xff0c;并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了&#xff01;但是&#xff0c;如果你仔细审视那些 API&#xff0c;会发现它们还很“粗糙”&#xff1a;有…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下&#xff0c;知识图谱凭借其高效的信息组织能力&#xff0c;正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合&#xff0c;探讨知识图谱开发的实现细节&#xff0c;帮助读者掌握该技术栈在实际项目中的落地方法。 …...

css3笔记 (1) 自用

outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size&#xff1a;0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格&#xff…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题

分区配置 (ptab.json) img 属性介绍&#xff1a; img 属性指定分区存放的 image 名称&#xff0c;指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件&#xff0c;则以 proj_name:binary_name 格式指定文件名&#xff0c; proj_name 为工程 名&…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA

浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求&#xff0c;本次涉及的主要是收费汇聚交换机的配置&#xff0c;浪潮网络设备在高速项目很少&#xff0c;通…...

iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈

在日常iOS开发过程中&#xff0c;性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期&#xff0c;开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发&#xff0c;但背后往往隐藏着系统资源调度不当…...

并发编程 - go版

1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程&#xff0c;系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...