Git:autocrlf=true core.eol=native 与 autocrlf=input

2024-01-11

有人可以解释一下设置之间的区别吗:

core.autocrlf = true

core.eol = native

and

core.autocrlf = input

当我们同时使用这两种情况时?


我们什么时候[应该]使用[这些设置中的任何一个]?

我的偏好是never。另一方面,我也不在 Windows 上工作。 :-) 但是,如果您通读下面的所有文字,您会发现如果我这样做,我仍然会说“从不”。 (即使您正在共享一些不允许您创建的上游存储库.gitattributes文件,您可以使用每个存储库$GIT_DIR/info/attributes文件在您自己的克隆中。)

[有什么不同?]

为了弄清楚区别,我们首先需要注意:

  • 什么是转化? Git 可以进行哪些转换?
  • Git 什么时候可以进行转换?什么时候willGit 做转换吗?
  • Git 如何判断一个文件是“文本”?

转换、输入和输出:清洁和污迹

第一部分非常简单,尽管它给新手带来了自己的绊脚石。 Git 可以做任何你想要的转换,因为它有 Git 所说的清洁过滤器 and 污迹过滤器.

A 清洁过滤器是您(是的,您!)可以自己编写的转换,当您使用以下命令将文件从工作树复制到索引时,Git 将应用该转换git add或同等学历。也就是说,假设您将一个文件检出到工作树中,并且您对其进行编辑,或完全替换它,或对其运行某些程序以对其进行更改。您可能想要提交该文件的新版本。所以你必须跑git add path将文件从工作树复制回索引。 (请记住,Git 会根据index,而不是来自工作树中的内容。这就是为什么你必须不断git add始终保存您的文件:Git 不会自动从工作树复制到索引。)

每当你跑步时git add file,Git 会在进入时“清理”文件。这是一个输入转换.

相反,你可以自己写污迹过滤器,这是您在数据到来时对数据进行归档的操作outGit(从索引中,到你的工作树中)。由于 Git 内的所有文件(包括索引中的文件)都已准备好复制到next提交,每个文件都采用某种特殊的、内部的、仅限 Git 的格式must转换为所有常规计算机程序可以处理的正常格式。每当您提取文件时to在工作树中,Git 会在退出时“弄脏”(弄脏)文件。那是一个输出转换.

Git 有时会进行输入转换,而不实际将文件复制到索引中:特别是,如果您运行git diff必须将工作树文件与同一文件的索引或提交副本进行比较,即inside存储库已经被“清理”,而工作树中的存储库则全部“弄脏”和“肮脏”。在它们都处于相同状态之前无法进行比较,因此 Git 会在进行比较之前“清理”工作树。

内置的行结束转换

Git 有两个内置转换。一种是在清理时使用,即当文件从工作树复制到 Git(复制到索引)时。这将 CRLF 行结尾替换为仅换行符、Linux 风格的行结尾。另一个是在涂抹时使用的,即从 Git 中复制文件时。这个将仅换行符的 Linux 风格的行结尾替换为......好吧,某物.

这个“东西”在哪里core.eol你可以让 Git 用 CRLF 替换换行符,如果你在 Windows 上并且你的程序要求行以 CRLF 结尾,那么你可能会想要这样做,但你也与在 Linux 上工作的人一起工作,这要求行以仅 LF 换行样式结尾结束。

或者,您可以让 Git 用仅 LF 替换换行符...但这不是替代品,因为换行符is换行符“LF”。称其为替代品有点愚蠢。

你可以让 Git 根据你的系统选择结尾,这样一种配置,core.eol set to native,适用于both Linux and视窗。

Git 有点狡猾:当它要用 LF“替换”LF(这毕竟不是替换)时,它往往什么都不做——甚至不检查任何东西——因此速度更快。看起来你可能永远不会注意到这一点,除了core.safecrlf设置要求 Git 检查事物。这safecrlf事情涉及一些猜测,并且意味着过度保护并让你设置.gitattributes如果您要进行转换,请更改设置,这样就不会损坏任何二进制文件。

二进制文件:Git 如何判断文件是文本?

有些文件,例如.jpg例如,图像只是not text并且应该never have any他们的数据以“文本式”方式修改。它们需要使用图像操作代码进行操作,而不是使用文本编辑器或 Git 内置转换的笨拙工具行。因此 Git 需要一种方法来区分text文件,应该应用这些行结束转换,来自non-text or binary files.

如果你不告诉 Git 哪些文件是哪些,它就必须猜测。 Git用来猜测的方法是not看看.jpg or .txt扩展名——这不适用于名为README, 例如。相反,Git 会查看文件中存储的数据,并根据它“看起来像文本”还是“看起来二进制”进行猜测。

正如你可以想象的那样,这个猜谜游戏并不完美。它可能对你有用,但如果不起作用,你可以而且应该tellGit 哪些文件是哪些。您可以通过创建一个名为的文件来完成此操作.gitattributes. In .gitattributes,您可以列出特定的文件名,例如README,或路径名模式,如*.txt and *.jpg,作为“绝对文本”或“绝对二进制”。你这样做text or -text。你还可以告诉 Git:guess!你这样做auto:

*.txt   text
*.jpg   -text
guess   auto

你永远不应该使用auto如果你能帮忙的话。

如果您从未让 Git 进行任何转换,则不必执行此操作。告诉 Git 哪些文件是文本文件、哪些文件是二进制文件的目的是确保 Git 正确进行转换,并且只有在进行转换时才需要这样做。因此,如果您避免使用 Windows,则不必创建.gitattributes并列出您的文件。无论如何,创建它并没有什么坏处,但如果你确实创建了它,你应该尝试让它覆盖你的所有文件,这样 Git 就不必猜测。

现在我们知道了这一切,我们可以理解文档了

考虑到上述内容,我们可以看到什么core.autocrlf通过咨询来做the git config文档 https://www.kernel.org/pub/software/scm/git/docs/git-config.html并向下滚动到core.autocrlf描述:

将此变量设置为“true”与设置text所有文件上的属性为“auto”,core.eol 为“crlf”。设置 true 如果你想拥有CRLF工作中的行尾 目录和存储库具有 LF 行结尾。这个变量可以 被设置为input,在这种情况下不执行输出转换。

换句话说,core.autocrlf=true就像使用auto对所有文件进行设置,这是你永远不应该做的事情。所以你永远不应该使用这个。 :-) 它can工作,但我不推荐它:创建一个适当的.gitattributes并在那里列出您的所有文件,这样您就不会玩猜谜游戏。一旦你的.gitattributes文件列出了所有内容,core.autocrlf=true没有影响,因为.gitattributes设置会覆盖它。

Using core.autocrlf=input告诉 Git 做同样的猜测,但也只做输入转换(在此期间git add例如清洁)。我自己对这种设置没有任何用处,并且无法真正想象在任何情况下这是一个好主意。这种情况可能存在,但如果您确实要进行转换,则应该明确指定它们;一旦您在您的中正确指定了它们.gitattributes文件,似乎在两个方向上进行转换更有意义,所以没有理由使用input.

至于设定core.eol to native,文档声称这是默认设置(并且似乎是最佳选择),因此除了覆盖其他配置文件对非默认设置的不良选择之外,没有理由打扰。

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

Git:autocrlf=true core.eol=native 与 autocrlf=input 的相关文章

  • VS 2015 + Bower:在防火墙后面不起作用

    Problem 在 Visual Studio 2015 中 使用 Bower 我的包在防火墙后面时恢复失败 并出现类似以下内容的错误 ECMDERR 无法执行 git ls remote tags heads git github com
  • 如何将工作树与提交进行比较?

    我在用着 git diff mycommit 用于比较我的工作树mycommit 但它似乎忽略当前索引中不存在的文件 您可以按如下方式重现它 git init echo A gt A txt git add git commit m A g
  • git 认为文件已更改

    我在一台机器上对一个项目做了一些工作 然后推送到 github 在另一台机器上克隆并做了一些工作 然后推送 然后我回到第一台机器并做了一个pull 现在 第一台机器认为项目中最初的所有文件都已更改 我试过了 git checkout f a
  • `git Reset HEAD file` 是否也检查该文件?

    我错误地向 git 添加了一个目录 当我按照提示操作时here https stackoverflow com questions 348170 undo git add通过执行以下操作来撤消添加git reset HEAD
  • GIT:以下未跟踪的工作树文件将被签出覆盖

    我有两个分支 一个称为 master 另一个称为 dev 我目前位于 master 分支 我想转到 dev 分支将文件移动到开发服务器 但是当我执行 git checkout dev 我收到消息 以下未跟踪的工作树文件将被覆盖 查看 pag
  • 创建一个空分支?

    我有一个包含项目的 git 存储库 我现在要对这个项目进行大规模的修改 如何为这次大修创建一个空白的新分支 然后当完成时 如何将这个分支切换到master 使用 checkout orphan 命令 git checkout orphan
  • git 提交错误:检测到大文件

    您好 我正在为 ios 8 1 开发一个应用程序 xcode 我已经使用 googleMaps 框架来实现自动完成功能 当我尝试在 Git 中推送我的项目时 我收到大文件检测错误 后来尝试使用 git lfs 并跟踪 git 检测到的文件
  • .Net应用程序设置路径

    默认情况下 Windows 应用程序设置保存在该目录中 USERPROFILE Local Settings Application Data
  • 当当前分支上有未提交的更改时签出另一个分支

    大多数时候 当我尝试签出另一个现有分支时 如果我在当前分支上有一些未提交的更改 Git 会不允许我这样做 所以我必须首先提交或隐藏这些更改 然而 有时 Git 确实允许我在不提交或存储这些更改的情况下签出另一个分支 并且它会将这些更改携带到
  • Git 提交失败:“请使用 -m 或 -F 选项提供消息。”

    当我键入 git commit 命令来提交文件时 我收到以下错误消息 Microsoft Visual Studio 微软 找不到命令 错误 核心编辑器 Microsoft Visual Studio 存在问题 请使用 m 或 F 选项提供
  • 如何让 Aptana Studio 记住 git ssh 密码

    我找不到任何有关如何获得 Aptana Studio 的内置 git 支持来记住执行推 拉操作的 ssh 密码的指南 信息 有人有什么想法吗 Aptana Studio 实际上是内置的 GIT 程序 它将在 Windows 上的 C Use
  • git 排除与忽略

    I use Tower http www git tower com 用于在 Mac 中使用 Git Tower 中的设置具有创建 gitignore 的 忽略 部分 但它还有另一个名为 排除 的部分 似乎可以将排除与 git ls fil
  • 无法通过 Git Bash 克隆 git 存储库

    在尝试使用克隆存储库时git clone 它显示以下错误 致命 无法访问 https github com microsoft c9 python getting started git https github com microsoft
  • git reflog 和 log 有什么区别?

    手册页说 log 显示提交日志 reflog 管理 reflog 信息 reflog 信息到底是什么 它有哪些日志没有的信息 日志看起来更详细 git log显示当前的 HEAD 及其祖先 也就是说 它打印提交 HEAD 指向的提交 然后打
  • 如何在 Windows 上的 Eclipse 中设置 Clang 工具链?

    我为一个愚蠢的问题道歉 但我在网上找不到答案 我正在努力为 64 位计算机上的 Windows 7 中的 Eclipse 设置 Clang 编译器 链接器 我对 C 的了解非常过时 并且从未在 Eclipse 中工作过 我想要实现的是在 W
  • 使用 gitignore 嵌套存储库。

    我想嵌套 2 个 git 存储库 我一直在阅读子模块 有一段时间我认为它很棒 我想我可能想要其他东西 这是我的情况 首先 我想我应该提到我的所有服务器都托管网站 并以 staging domain com 和 domain com 实时 模
  • VSTS:在构建过期的情况下自动变基/合并和重新排队构建验证门

    我们最近对 PR 上的构建验证门进行了更改 这样 如果另一个提交在当前 PR 完成之前进入主分支 则构建会 立即 过期 看here https stackoverflow com questions 49418800 vsts invali
  • Gerrit 和 Active Directory

    我正在尝试设置 Gerrit 以使用我们的公司 Active Directory 进行身份验证 我知道很多人都设法让它发挥作用 但它对我来说不起作用 如果我运行一个ldapsearch命令如下我得到了正确的结果 所以我知道我的搜索字符串是正
  • git 推送到 github 失败并显示“错误:pack-objects 因信号 967 死亡”

    我触发了这个命令 git push origin master 我得到这个结果 Counting objects 15626 done Delta compression using up to 4 threads error pack o
  • GIT:提交时“致命:无法写入 new_index 文件”

    当我尝试将更改提交到本地存储库时 我收到以下消息 致命 无法写入 new index 文件 As this 线程说明 http luhman org blog 2010 04 05 git fatal unable write newind

随机推荐

  • 步骤向导形式

    我正在使用角度动态表单进行角度应用程序 我需要将表单分成两部分 其中我有输入字段firstname and lastname在第一页 然后单击下一个按钮 其中的子项email and dropdown需要加载 Html
  • window.URL.revokeObjectURL() 不会立即释放内存(或根本不释放内存)?

    我正在制作一个 html 界面 通过拖放和多个选择文件将图像上传到服务器上 我想在将图片发送到服务器之前显示它们 所以我首先尝试使用FileReader但我遇到了一些问题 比如这个帖子 https stackoverflow com que
  • CSS 框阴影不是真正透明的?

    这是一叠 8 个白色框阴影 底部为蓝色背景渐变 其他地方为白色背景 按照我的逻辑 白色背景上的白色框阴影应该会产生白色 但显然有一个灰色的边缘将白色 div 与白色背景的其余部分分开 生成这个的 css 是 content sidebar
  • 使用 SQLITE 为 Google App Engine 进行本地 Django 开发?

    我正在使用 Google App Engine 在 Django 中进行开发 对于生产 我计划使用 Google Cloud SQL 但对于本地开发 我想使用简单的 SQLITE 谷歌教程 https developers google c
  • 无法使用 NHibernate 加入分布式事务

    我在单元测试中发现一个问题 Oracle 抛出异常并显示消息 无法加入分布式事务 我们正在使用 ODP net 和 NHibernate 在嵌套事务内对数据库进行一定数量的提交后 就会出现此问题 令人烦恼的是 这在持续集成服务器 Windo
  • 在嵌套匿名结构上忽略 C++ 私有修饰符

    以下示例代码在 Visual C 中编译得很好 class Test private struct struct int privateData int main int char Test test test privateData 0
  • 使用 PHP + XDEBUG 时在 VS Code 中显示长字符串

    我正在使用 VS Code 进行 PHP Web 开发 带有 XDEBUG 的 VS Code 在显示字符串值变量方面似乎受到严重限制 变量和监视窗口仅限于窗口宽度或第一个换行符 您可以通过评估字符串在调试控制台中显示更多内容 但最多只能超
  • 找不到类“android.app.Notification$Builder”

    我已将 android support v4 jar 添加到我的项目库中 但我收到此错误 Could not find class android app Notification Builder referenced from metho
  • SVG 变换旋转 90、180 或 270 度,在 Safari iOS 10 中不适用于圆形

    我想通过设置使用 SVG 圆形元素创建一个圆环图stroke dasharray和变化的stroke dashoffset SVG 元素需要旋转 270 或 90 度才能使图表 条 从顶部开始 这是代码 http jsfiddle net
  • 有没有办法使用 std textio 在 vhdl 中多次读取文件?

    我试图了解如何在 vhdl 中读取文件 如果我打开一个文件 通读它 测试文件结尾 关闭文件 然后重新打开该文件 然后再次开始读取 它会从开头开始吗 文件 非常感谢 向 VHDL 语言的权威寻求答案 IEEE 标准 1076 2008 5 5
  • C++ Win32 API 删除带进度条的文件

    使用Windows API 有没有办法删除一个大文件 比如说1GB 并以某种方式监控进度 我确信这是可能的 但我不知道从哪里开始 编辑 应该更具体 我想将文件移动到回收站 并显示类似于探索的进度条 尽管我可能希望在控制台或其他东西中显示进度
  • Wamp 2.2 安装 PEAR

    我的操作系统是Windows 7 我的电脑上安装了 WAMP2 2 然后我尝试安装PEAR 然而 我找不到我的go pear bat文件在我的 wamp 目录中 美好的 我在这里下载 http pear php net go pear ph
  • 将大文件从 Google Cloud Storage 加载到 Google Cloud Functions 中?

    有没有办法将大文件 gt 100MB 从 Google Cloud Storage 加载到 Google Cloud Functions 中 我在他们的书中读到quotas https cloud google com functions
  • 从 bash 脚本更改导出变量的值

    我从 bash shell 执行了以下操作 export myPath home user dir 然后我通过从 shell 和 bash 脚本内部 回显 该值来验证该值 两者都工作得很好 然后我尝试从这样的脚本内部设置该变量的值 myPa
  • 在 Django 中存储用户活动

    我正在寻找存储用户的活动 但我不确定将其存储在哪里 我不认为数据库是一个选择 因为它会非常大 我想知道 Facebook Dropbox 等网站如何记住特定用户的所有活动 并且它不能存储在会话中 因为这不是特定于会话的而是特定于用户的 请帮
  • 将响应从 AFHTTPRequestOperation 传递到 UIWebview

    我的代码向服务器发出两个请求 一种是直接进入 uiwebview 另一种是通过 AFHTTPRequestOperation 我想使用 AFHTTPRequestOperation 并将响应传递到我的 uiwebview 中 将响应传递到
  • 通过 Producer 类将 RequestScoped CDI Bean 注入 ApplicationScoped CDI Bean

    本文介绍了您可以将 RequestScoped beans 注入 ApplicationScoped beans 并且客户端代理将在请求期间指向正确的实例 较短范围的 Bean 实例注入到 CDI 中较大范围的 Bean 实例中 它是如何工
  • 如何检查 ruby​​ 中是否定义了私有方法

    我能找到的最接近的是在 Ruby 中 如何检查方法 foo 是否已定义 https stackoverflow com questions 2348521 in ruby how do i check if method foo is de
  • 如何将 HttpContext.Current 传递给使用 .net 中的 Parallel.Invoke() 调用的方法

    我有两种利用 HttpContext Current 来获取 userID 的方法 当我单独调用这些方法时 我得到了 userID 但是当使用相同的方法调用时 Parallel Invoke HttpContext Current 为 nu
  • Git:autocrlf=true core.eol=native 与 autocrlf=input

    有人可以解释一下设置之间的区别吗 core autocrlf true core eol native and core autocrlf input 当我们同时使用这两种情况时 我们什么时候 应该 使用 这些设置中的任何一个 我的偏好是n