首页 > 其他分享 >Git仓库代码在不同操作系统里结尾^M问题的记录

Git仓库代码在不同操作系统里结尾^M问题的记录

时间:2024-09-29 11:02:02浏览次数:7  
标签:文件 Git 操作系统 更改 text git 结束符 结尾

每次按键盘上的Return时,会插入一个称为行结束符的不可见字符^M。 不同的操作系统处理行结束符的方式不同。
在使用Git或者GitHub协作处理项目时,Git可能产生意外结果。例如,您在Windows计算机上操作,而您的协作者是在macOS或者Linux中做的更改。
您可以将Git配置为自动处理行结束符,以便与使用不同操作系统的人员有效地协作。Git具有为本地平台自动转换行尾的“功能”。

方法一:全局设置

"git config --global core.autocrlf"命令用于更改Git处理行尾的方式。 它将采用单一参数。
在Windows系统上:

# 在Windows系统中,将回车符转换为换行符提交到Git仓库,在检出时自动转换回来(即恢复为回车符)
$ git config --global core.autocrlf true

在Linux和Mac系统上

# 在Linux或Mac系统中,提交时不会将回车符转换为换行符,在检出时也不会进行转换。
$ git config --global core.autocrlf input 

方法二:按仓库设置

可以选择在项目根目录配置.gitattributes文件来管理Git读取特定存储库中的行结束符的方式。这个文件将覆盖所有项目参与者本地的core.autocrlf设置。这可确保所有用户的行为一致,而不管其Git设置和环境如何。
.gitattributes文件必须在存储库的根目录下创建,且像任何其他文件一样提交。
.gitattributes 文件看上去像一个两列表格:

  • 左侧是Git要匹配的文件名。
  • 右侧是Git应对这些文件使用的行结束符配置。

示例:

下面是一个示例.gitattributes 文件。 您可以将其用作仓库的模板:

# 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.
*.c text
*.h text

# Declare files that will always have CRLF line endings on checkout.
*.sln text eol=crlf

# Denote all files that are truly binary and should not be modified.
*.png binary
*.jpg binary

你会注意到,文件是匹配的,即.c、.sln、*.png(用空格分隔),然后给定一个设置,即text、text eol=crlf、binary。我们将在下面介绍一些可能的设置。

  • text=auto Git 将以其认为的最佳方式处理文件。 这是一个合适的默认选项。
  • 在检出时 text eol=crlf Git 将始终把行结束符转换为 CRLF。 你应将其用于必须保持 CRLF 结束符的文件,即使在 OSX 或 Linux 上。
  • 在检出时 text eol=lf Git 将始终把行结束符转换为 LF。 您应将其用于必须保持 LF 结束符的文件,即使在 Windows 上。
  • binary Git 会理解指定文件不是文本,并且不应尝试更改这些文件。 该 binary 设置也是 -text -diff 的别名。

在更改行结束符后刷新仓库

设置core.autocrlf选项或提交.gitattributes文件后,Git会自动更改行结束符以匹配新配置。 会发现,Git会报告你未修改的文件的更改。
若要确保存储库中的所有行结束符都与新配置匹配,请使用 Git 备份文件,然后移除并还原所有文件以规范化行结束符。

  1. 在添加或提交任何更改之前,请验证Git是否已正确应用配置。例如,Git自动确定存储库中的文件是文本文件还是二进制文件。为了避免存储库中的二进制文件损坏,建议在.gitattributes中将文件显式标记为二进制文件。有关详细信息,请参阅Git文档中的gitattributes-按路径定义属性
  2. 若要避免丢失对存储库中的文件的任何本地更改,请运行以下命令添加并提交任何未完成的更改。
$ git add . -u
$ git commit -m "Saving files before refreshing line endings"
  1. 若要更新当前分支上的所有文件以反映新配置,请运行以下命令。
$ git rm -rf --cached .
$ git reset --hard HEAD
  1. 若要显示重写的规范化文件,请运行以下命令。
git status
  1. (可选)若要在存储库中提交任何未完成的更改,请运行以下命令。
git commit -m "Normalize all the line endings"

标签:文件,Git,操作系统,更改,text,git,结束符,结尾
From: https://www.cnblogs.com/henry-0316/p/18439199

相关文章

  • IDEA更改远程git仓库地址
    前言我们在使用IDEA开发时,一般会配置好对应的git仓库,这样就比较容易对代码进行控制以及协同开发。 但有时候,我们远程的仓库地址由于这样那样的原因,需要迁移(这在爱折腾的企业是常有的事情)。那么,我们该如何在IDEA中更新远程仓库地址呢?如何设置首先,我们点击上方的【Git】按钮,打......
  • JavaEE初阶——认识操作系统
    目录一、操作系统1、概念2、操作系统的定位二、什么是进程1、什么是进程/任务(Process/Task)2、进程的描述与组织3、PCB中描述进程的特征4、进程调度的相关属性1、进程的状态2、优先级3、上下文4、记账信息三、内存管理1、虚拟地址空间2、进程的内存分配一、......
  • Repo:高效管理多Git仓库的工具
    目录一、概述1.1.背景与目的1.2.功能与特点1.3.应用场景1.4.优势与挑战二、初始化项目repoinit 三、同步代码reposync四、分支管理4.1.repostart4.2.repocheckout4.3.repobranch五、代码提交与审核5.1.repoupload5.2.repodownload(概念性)六、其......
  • 欧拉操作系统进行分区挂载/data
    要有一个/data目录虚拟机上面的硬盘使用情况lsblkvdb,一块新的独立的硬盘空间这里先使用命令vgdisplay看下是不存在卷组的如果不存在pvdisplay命令则安装下yuminstall-ylvm2--releasever=7新建磁盘分区:fdisk/dev/vdbm接着输入p选择主分区,默认也可......
  • Linux环境下git仓库的搭建
    (1).参考文献官网在线教程:https://git-scm.com/book/zh/v2官方网站:https://git-scm.com/(2).实验环境2核2GCentOS7.6.1810(3).安装git1)yum或dnf安装[root@VM-0-17-centos~]#dnf-yinstallgit-all2)源码安装安装依赖包[root@VM-0-17-centos~]#dnf......
  • dremio 25.1 github 代码变动
    dremio25.1已经发布了好几个礼拜了,以前说过github社区版25.1版本的没有提交最新的,最近看了下github已经提交新的了而且这次应该是比较完整的构建上的一些问题jdk依赖这个保持不变,同时看官方一些信息对于maven构建已经调整了,有了不错的支持ui组件目前@dremio/dremi......
  • 一些超好用的 GitHub 插件和技巧
    聊聊我平时使用GitHub时学到的一些插件、技巧。‍‍浏览器插件在我的另一篇博客浏览器插件推荐里提到过跟GitHub相关的一些插件,这里重复下:Sourcegraph:在线打开项目,方便阅读,将GitHub变得和IDE一般,集成各种功能,参考爱了爱了,这个GitHub的Chrome神仙插件把我整的......
  • 使用 git reset 命令回退历史
    基于:gitreset命令详解(一)——Git学习笔记07建议先阅读Git工作区、暂存区和版本库、Git分支本质及与commit、HEAD、tag的关系。简介gitreset命令是用来将当前branch重置到另外一个commit的,也就是用来回退到指定commit,根据不同的参数,这个动作可能同时影响到Ind......
  • 使用 Git 帮助文档
    聊聊如何更好地查阅官方文档。‍githelp学习某个工具,官方文档是少不了的,也是最权威的。我们可以使用githelp来查看帮助,该命令会列举出常用的命令和介绍:>githelpusage:git[--version][--help][-C<path>][-c<name>=<value>][--exec-path[=<path>]][-......
  • 2款.NET开源且免费的Git可视化管理工具
    Git是什么?Git是一种分布式版本控制系统,它可以记录文件的修改历史和版本变化,并可以支持多人协同开发。Git最初是由Linux开发者LinusTorvalds创建的,它具有高效、灵活、稳定等优点,如今已成为软件开发领域中最流行的版本控制系统之一。Git使用一种名为“仓库”的数据结构来保存代码......