为什么 git 对标记为二进制的文件发出 CRLF 警告?

2023-12-09

我有一个已标记为二进制的文件:

$ cat .gitattributes
dist/* binary
$ git check-attr -a ./dist/app.js
./dist/app.js: binary: set
./dist/app.js: diff: unset
./dist/app.js: merge: unset
./dist/app.js: text: auto

And git diff正确地将文件视为二进制文件:

$ git diff
diff --git a/dist/app.js b/dist/app.js
index 9c05798..fbcedd4 100644
Binary files a/dist/app.js and b/dist/app.js differ

但当我跑步时git status,我收到一条警告CRLF转换:

$ git status
warning: CRLF will be replaced by LF in dist/app.js.
The file will have its original line endings in your working directory.
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        modified:   dist/app.js

这是怎么回事?为什么 git 会警告我有关此文件中的 CRLF 的情况?


Git 2.10(2016 年第 3 季度)应该更加小心二进制中的 crlf。

See commit 6523728 (28 Jun 2016) by Torsten Bögershausen (tboegi).
(Merged by Junio C Hamano -- gitster -- in commit 21bed62, 25 Jul 2016)

convert: 统一“auto" CRLF 的处理

在这次改变之前,

$ echo "* text=auto" >.gitattributes
$ echo "* eol=crlf" >>.gitattributes

会产生相同的效果

$ echo "* text" >.gitattributes
$ git config core.eol crlf

自从'eol' 属性的优先级高于 'text=auto',这可能会损坏二进制文件,并且不是大多数用户期望发生的情况.

使 'eol' 属性服从 'text=auto' 现在

$ echo "* text=auto" >.gitattributes
$ echo "* eol=crlf" >>.gitattributes

行为相同

$ echo "* text=auto" >.gitattributes
$ git config core.eol crlf

Git 2.13 (Q2 2017) makes sure the normalization uses the right commands
See commit 8599974 (12 Apr 2017) by Torsten Bögershausen (tboegi).
(Merged by Junio C Hamano -- gitster -- in commit 848d9a9, 24 Apr 2017)

To 触发重新正常化:

从干净的工作目录:

$ echo "* text=auto" >.gitattributes
$ rm .git/index     # Remove the index to re-scan the working directory
$ git add .
$ git status        # Show files that will be normalized
$ git commit -m "Introduce end-of-line normalization"

使用 Git 2.36(2022 年第 2 季度),eol 属性文档已完成。

See commit 8c591db, commit ab96151 (11 Jan 2022) by brian m. carlson (bk2204).
(Merged by Junio C Hamano -- gitster -- in commit 8db2f66, 11 Feb 2022)

docs:有关 eol 属性的正确文档

Signed-off-by: brian m. carlson

eol 属性的文档指出它是“有效设置文本属性”。

然而,这意味着它强制始终设置文本属性,但自从6523728 (convert:统一,2016-06-28,Git v2.10.0-rc0 --merge列于batch #7) (“转换:统一 CRLF 的“自动”处理”,2016-06-28)。

让我们通过清楚地记录“eol”属性在哪些情况下起作用来避免让用户(以及当前作者在尝试向其他人描述 Git 的行为时)感到困惑。

具体来说,除非文件明确设置为,否则该属性始终有效-text,或者文件设置为text=auto并且该文件被检测为二进制文件。

gitattributes现在包含在其man page:

该属性仅在以下情况下有效text属性已设置或未指定,或者如果设置为auto和文件 被检测为文本。

请注意,在路径上设置此属性 位于带有 CRLF 行结尾的索引中可能会使路径成为 被认为是肮脏的。

再次将路径添加到索引将使索引中的行结尾标准化。


为了进一步澄清,Git 2.36(2022 年第 2 季度)更新了文档:

See commit 6a5678f (14 Feb 2022) by brian m. carlson (bk2204).
(Merged by Junio C Hamano -- gitster -- in commit 66633f2, 23 Feb 2022)

doc:澄清 'eol' 和 text=auto 之间的交互

Signed-off-by: brian m. carlson

The eol仅当索引包含以 LF 行结尾的内容时,才对文本文件生效。
索引中以 CRLF 行结尾内容的路径可能会变脏,除非text=auto.

gitattributes现在包含在其man page:

该属性设置要在 工作目录。

该属性仅在以下情况下有效text属性已设置或未指定,或者如果设置为auto,文件被检测为文本,并且它以 LF 结尾存储在索引中.

请注意,在索引中以 CRLF 行结尾的路径上设置此属性可能会使路径被视为脏路径unless text=auto is set.
再次将路径添加到索引将使索引中的行结尾标准化。


使用 Git 2.40(2023 年第一季度),树内.gitattributes更新以匹配我们建议用户将文件标记为文本的方式。

See commit 1f34e0c (03 Feb 2023) by Philip Oakley (PhilipOakley).
(Merged by Junio C Hamano -- gitster -- in commit f7c208c, 15 Feb 2023)

.gitattributes: 包括text属性为eol属性

Signed-off-by: Philip Oakley

文本文件 eol 结尾的标准建议.gitattributes文件已更新于e28eae3 (gitattributes:文档统一,2016-08-26,Git v2.10.0-rc2 --merge)(gitattributes:记录统一的“自动”处理,2016-08-26)最近的澄清8c591db ("docs:有关 eol 属性的正确文档”,2022-01-11,Git v2.36.0-rc0 --merge列于batch #3),原作者的后续评论这个线程,确认 eol 属性与 text 属性的结合使用。

更新 Git 的.gitattributes文件以反映我们自己的建议。

所以而不是:

/Documentation/**/*.txt eol=lf

您现在拥有:

/Documentation/**/*.txt text eol=lf
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 git 对标记为二进制的文件发出 CRLF 警告? 的相关文章

  • 执行 git Push 时出现“diff.renamelimit 变量”警告

    我将本地提交推送到远程 git 服务器并收到以下警告消息 remote warning only found copies from modified paths due to too many files remote warning y
  • SSL 适用于浏览器、wget 和curl,但不适用于 git

    我有一个网站 用于托管 redmine 和几个 git 存储库 这非常适合 http 但我无法使用 https 进行克隆 即 git clone http mysite com git test git 工作正常 但是 git clone
  • Spring Cloud Config - 不允许使用 git-upload-pack

    我有一个在 docker 环境中运行的 spring boot 应用程序 它连接到 Git 存储库以获取应用程序的配置 我的问题是 当尝试获取 properties 文件时 应用程序有时会出错 这很奇怪 因为如果我更改用户和密码 同一个应用
  • 为别名命令添加“git help”?

    我已经实现了一个 Git 命令并使用 git 别名将其连接到 Git 但是有没有办法连接 Git 帮助 我在 Windows 上运行 如果我发出git help mycmd我收到一个弹出窗口 告诉我 Git 找不到 git mycmnd h
  • Git:以新名称签出旧版本的目录

    如何以新名称查看目录的先前版本 我一直都有一个目录foo在我的仓库中 我想创建一个目录foo old在我当前的工作树中 其内容是HEAD 2 foo 我同时需要两个版本 以确保它们给出相同的结果 测试这需要相当多的代码 并且需要同时提供两个
  • Smartgit:自动插入提交消息

    有没有办法使用钩子脚本在 Smartgit 中自动插入提交消息 重击 如果用户提交了他的更改 我想预加载提交消息字段 我没有看到任何SmartGit配置 http www syntevo com smartgit documentation
  • 删除 Xcode 项目的源代码控制

    我在 Xcode 项目上使用源代码控制已经有一段时间了 但现在我不想使用源代码控制 如何从 Xcode 中的项目中删除源代码控制 有三种方法 方法 1 将禁用所有项目的源代码管理 方法 2 将删除所有项目的单个存储库的链接 方法 3 将删除
  • 如果您使用 CocoaPods,您的 .gitignore 中会包含什么内容?

    我从事 iOS 开发已经几个月了 刚刚了解到有前途的可可豆荚 http cocoapods org 用于依赖管理的库 我在个人项目上尝试过 添加了依赖项Kiwi https github com allending Kiwi到我的 Podf
  • 结帐时出现 Git 错误:“致命:引用不是树”

    当我决定弄清楚为什么我正在从事的项目如此重要时 这一切就开始了 我运行了以下脚本 git rev list objects all git cat file batch check objecttype objectname objects
  • 在种子项目上构建时如何组织 git 存储库

    我正在基于从 github 克隆的种子项目 MEAN io 构建一个网站 如何将这些文件与我自己的文件分开 由于该种子提供了广泛的文件框架 因此我自己的文件分布在整个项目中 我希望能够从种子中提取更新 但不能将其与我添加的文件混合 我知道我
  • 如何在源代码管理中存储 Visual Studio 的调试配置

    Visual Studio 的调试配置存储在 user文件是用户特定的并且传统上被源代码管理忽略 我对工作目录参数感兴趣 我需要它在程序员的机器上保持一致 并且它具有以下价值 outDir而不是默认的 ProjectDir 我怎样才能解决这
  • 如何在现有裸存储库中创建引用日志信息

    您可能已经知道 默认情况下 git 不会为新的裸存储库启用引用日志更新 问题是 我有一个很长的历史存储库 但它是在我设置 logAllRefUpdates 标志之前创建的 现在我希望其他应用程序可以使用该信息 如何通过对现有存储库进行最少的
  • git merge --squash 和 gitcherry-pick 有什么区别?

    如果我在标准的主功能工作流程中工作 那么将功能分支压缩到主功能分支和将其挑选到主功能分支之间有什么区别 分支示例 m1 m2 master f1 f2 feature 我认为两者都有相同的输出 即 m1 m2 m3 master f1 f2
  • git 清除远程仓库

    如果我将错误的初始提交 或多个 推送到远程存储库 并且只想清除 销毁它 我可以通过命令来完成吗 将其从服务器中完全删除非常重要 这样它就不会占用磁盘空间 例如 今天我推送了一个完整的 Visual Studio 项目 其中包含 dll sd
  • Git 忽略本地文件更改

    我都尝试过 git update index assume unchanged config myconfig and editing git info exclude并添加config myconfig 然而 当我执行 git pull
  • Heroku 没有更新 Rails 应用程序的 CSS

    我在 heroku 上更新 Rails 应用程序时遇到问题 我已经启动了我的应用程序 但我尝试更改 public stylesheets 中的 application css 文件 但每当我尝试推送到 heroku 时 CSS 都不会更改
  • 为什么我们应该在 git commit 命令中使用 -m ?

    git commit m my commit 我们使用此命令将提交添加到我的 Github 存储库 这个 m 是什么意思 Do a git commit help m是为了留言 这将出现在您的提交历史记录中 例子 git commit m
  • 使用 git 将一系列小的合并从 master 压缩到我的分支中,同时保留对 master 的引用?

    我有一个非常复杂的合并要做 部分问题在于我浪费了太多时间 因此要纳入我的分支的更改量是巨大的 为了让事情变得更容易 我选择这样做git merge origin master 20 then git merge origin master
  • 使用 cron 作业推送到 GitHub - 权限被拒绝(公钥)

    我已经创建了一个 SSH 密钥 如下官方教程 https help github com articles generating ssh keys 00 将其添加到 GitHub 并创建一个 Bash 脚本 用于提交单个文件并将其推送到我在
  • 如何将 npm 依赖项指定为 github 子文件夹 url?

    我的 git 存储库 README md packages common package json main package json 如何指定common依赖于mainpackage json 作为 github 子文件夹 url 这不起

随机推荐

  • Excel:如何使用VBA检查单元格是否为空? [复制]

    这个问题在这里已经有答案了 通过VBA 我如何检查一个单元格是否是另一个具有特定信息的空单元格 例如 如果 A A 产品特殊 且 B B 为 null 那么 C1 产品特殊 另外 我如何使用For Each循环在Range以及如何返回另一个
  • 选择不同数据库中的列

    是否可以在位于同一服务器上的不同数据库之间执行选择 或插入 语句 如果是 怎么办 您可以使用以下语法指定数据库databasename tablename Example SELECT mydatabase1 tblUsers UserID
  • 如何彻底卸载oracle 11g?

    如何从笔记本电脑上卸载 Oracle 11g 软件附带的卸载程序并不能完全卸载所有组件 我用Oracle12c试了一下 留下了很多程序 我尝试手动删除这些文件 但 BIN 目录中的某些 dll 文件无法访问 我想用 11g 做正确的事 有什
  • 使用jquery从父页面访问子IFrame中的元素

    我尝试使用以下代码从父文档访问 iframe 中文档的元素 但由于某种原因无法使其工作 父级 html
  • 需要帮助使用 GIOService(GLib、Glib-GIO)实现简单的套接字服务器

    我正在学习使用 GLib 编写简单 高效的套接字服务器的基础知识 我正在尝试 GSocketService 到目前为止 我似乎只能接受连接 但随后它们立即关闭 从文档中我无法弄清楚我错过了哪一步 我希望有人能为我阐明这一点 运行以下命令时
  • 如何提高最低成本路径模型的模拟速度

    通过使用网络扩展 以下代码在两个多边形 由多个面片组成 之间构建成本最低的路径 to calculate LCP ID polygon 1 ID polygon 2 let path let path cost 1 Define polyg
  • 如何确定用户在汇编语言 X86 中输入的字符串中单词的频率?

    我是汇编语言编程的完全初学者 我需要帮助编写一个汇编语言程序来从用户那里获取字符串 计算并显示每个单词在用户输入的字符串中出现的次数 例如 如果用户输入 Hello Hello what is new Hello what is not n
  • 查找数组一中最接近数组二的元素

    这个答案解释如何找到最接近 已排序 的数组元素单点 以对大型数组有效的方式 稍作修改 def arg nearest array value idx np searchsorted array value side left if idx
  • 如何使用 XAML 绑定按钮单击来更改面板(网格)的内容

    我正在创建 WPF 应用程序的 UI 在致力于软件功能的实现时 我在创建 UI 方面没有太多经验 现在我需要一种方法来更改 属性 面板的内容 该面板有一个网格来包含内容 我创建了多个面板 隐藏了除一个之外的所有面板 现在我想在用户单击顶部功
  • Slim PHP 的默认 GET 路由

    我最近使用 Slim PHP 框架构建了一个小型 API 它运行得很好 然而 我想为根 设置一个 GET 路由 它以基本消息响应 并让任何其他 GET 请求返回 访问被拒绝 在阅读了文档和各种示例后 我无法弄清楚如何完成这些任务 我的项目仅
  • APC 3.1.x 的稳定性如何?

    是否有人在大容量站点的生产中使用 APC 3 1 x 3 1 系列被标记为 测试版 版本 但它具有我们真正希望拥有的一些功能 具体来说 apc clear cache user 的性能改进没有成为 3 0 19 那么 您是否在非常活跃的站点
  • Python - 根据列的最大值删除重复项

    我不太擅长使用 pandas 我认为 pandas 应该解决我的问题 我有一个文本文件 其中包含数据 id1 id2 value1 value2 value3 1 2 30 40 20 3 1 2 30 42 26 2 3 5 12 55
  • 从 NTFS-MFT 参考号获取文件信息

    在我的 C 应用程序中 我已经有一种方法来检查文件系统 但我想利用从主文件表 MFT 中读取数据的优势 因为它的速度要快得多 我了解 1 它是专有规范 因此如有更改 恕不另行通知 2 仅当应用程序在管理权限下运行时才能访问它 我设法通过读取
  • 在 xpath/domdocument 查询中查找与给定字符串匹配的链接

    使用 Xpath 和 domDocument 获取与给定单词匹配的链接进行显示时遇到问题 一切似乎都进展顺利for i 0 i lt documentLinks gt length i 用来 谁能帮我解决我哪里出错了 html ol htm
  • 更新预填充数据库

    我为 Android 设备创建了一个问答游戏 我有一个数据库 在资产文件夹和 dbHelper 类中存在问题 一切正常 但现在我想修复一些拼写错误并添加更多问题 我需要更新数据库 但我不知道该怎么做 我在互联网上找到了这个 dbHelper
  • 单击事件在具有触摸事件的 iPad 上不起作用

    我正在页面链接上使用点击事件 在 iPad 上运行良好Safari 但是当我在同一页面上使用触摸事件时 单击事件将停止工作 iPad 上只有触摸事件有效 点击事件 link onclick onLinkClick 触摸事件 sdiv bin
  • 为什么 Application.Speech.Speak 单独读取一些数字而不是将它们放在一起?

    假设现在是 11 点 11 分 它读作 一一 小时 十一 分钟 如下所示 Sub TEST1 Application Speech Speak It is Hour Now hours and Minute Now minutes End
  • UnicodeWarning:Unicode 相等比较无法将两个参数转换为 Unicode

    我知道很多人以前遇到过这个错误 但我找不到解决我的问题的方法 我有一个想要规范化的 URL url u http www dgzfp de Dienste Fachbeitr C3 A4ge aspx EntryId 267 Page 5
  • 与 CSS 并排的列内的元素保持相同的高度

    我有一个这样的模板 我想在两列的每一项之间保持相同的高度 具体取决于高度最大的一项 但前提是它们并排时 在较小的屏幕中 当它们的 width 100 时 每个 div 都有自己的高度 具体取决于其自己的内容高度 它应该看起来像这样 我认为我
  • 为什么 git 对标记为二进制的文件发出 CRLF 警告?

    我有一个已标记为二进制的文件 cat gitattributes dist binary git check attr a dist app js dist app js binary set dist app js diff unset