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。
  • input,最终提交到代码库中时,所有CRLF转成LF。checkout时,保持LF或者CRLF(不转换)。(推荐在Linux/Unix下使用,不要在Windows下使用)

core.safecrlf不同值的作用:

  • true,若有mixed line endings,无法提交,fatal错误
  • false,
  • warn,只是警告,仍然可以提交

core.eol的值类型当且仅当core.autocrlf为false时,core.eol设置才有效

  • lf
  • crlf
  • native,根据平台,自动转换

Git版本管控的几个区域

  • 工作区, working directory,检出(git  checkout )到对应的分支
  • 暂存区,stage,通过git add 添加修改过的文件,git add的动作就是将文件修改放入到了暂存区
  • 本地版本库,通过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博客

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。

# 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.
#*.uvoptx text
#*.uvprojx text

# Declare files that will always have CRLF line endings on checkout
*.uvoptx text eol=lf
*.uvprojx text eol=lf

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。

 

 

你可能感兴趣的:(git,gitattributes)