使用 autocrlf=true 的 Git 按原样检查具有混合行结尾的文件

2023-11-27

所以,我一直认为与core.autocrlf=trueGit 替换所有LF结尾为CRLF将文件检出到工作目录时。

来自Git book:

如果您使用的是 Windows 计算机,请将其设置为 true – 当您签出代码时,这会将 LF 结尾转换为 CRLF

但是,当签出具有混合行结尾的文件时core.autocrlf set to true,我的 Git 版本按原样检查文件。

我找到了一个非常方便的 GitHub 存储库来测试此行为 -https://github.com/YueLinHo/TestAutoCrlf

检测结果:

  • A file with LF endings only (LF.txt)
    • With autocrlf=false:按原样签出(所有行结尾都是LF)
    • With autocrlf=true:所有行结尾都更改为CRLF结账时

到目前为止一切顺利,一切都如我所料。现在对于具有混合行结尾的文件:

  • A file with mixed line endings (MIX-more_CRLF.txt, MIX-more_LF.txt)
    • With autocrlf=false:按原样签出(混合LF and CRLF)
    • With autocrlf=true:按原样签出(混合LF and CRLF)

为什么会出现这种情况?我还没有看到任何关于autocrlf=true不接触具有混合行结尾的文件。

是我的 Git 设置有问题吗?我检查了core.autocrlf设置运行git config --get core.autocrlf签出后在存储库文件夹中autocrlf=true在全局 .gitconfig 中,该命令返回 true。没有 .gitattributes 文件可以覆盖设置。

所有测试均在 Git 版本上进行1.9.5.msysgit.0.

EDIT:最新 msysgit 版本上的行为相同1.9.5.msysgit.1.

我最初的问题是,我以某种方式设法提交了一个混合行结束文件,仅LF结局,同时有core.autocrlf set to true,意味着文件按原样签出,但提交时使用CRLF变成LF。我目前正在另一台机器上工作,无法在我的 msysgit 版本上重现此行为。


我正在重新发布一个被其所有者删除的答案,因为我认为它给出了最好的解释。我不知道作者为什么删除它,我认为这是正确的,我投票赞成取消删除。

显然,这种行为是在 Git 中硬编码的,并且不依赖于 core.safecrlf (并且我已经测试过这一点,即使我设置了混合文件也不会受到影响)git config core.safecrlf false.

原答案如下:


奥托克夫doesn't转换混合行结尾,正如 git 的源代码所示:

https://github.com/git/git/commit/a0ad53c18100226cb1a138cb9b3bc3615170be8f

请注意这里的评论:

/* No "naked" LF? Nothing to convert, regardless. */

and

/* If we have any CR or CRLF line endings, we do not touch it */
/* This is the new safer autocrlf-handling */

混合行结尾转换是不可逆的,完成后,Git 崩溃。

因此,如果您想自动转换文件的行结尾,设置一个.gitattributes处理行尾的文件。 例如:

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

使用 autocrlf=true 的 Git 按原样检查具有混合行结尾的文件 的相关文章

  • 如何使用 Git 跟踪目录而不是文件?

    我最近开始使用 Git 但只有一件事遇到了麻烦 如何在不跟踪目录内容的情况下跟踪目录 例如 我正在开发的网站允许上传 我想跟踪上传目录 以便在分支等时创建它 但显然不是其中的文件 在开发分支中的测试文件或主控中的真实文件 在我的 gitig
  • 将bitbucket发布到数字海洋

    我本质上是试图使用 bitbucket 来理解 git 的概念 我一直在通过修改本地帐户和 bitbucket 帐户之间的文件来练习版本控制 事实证明这很有帮助 现在我正在尝试弄清楚如何将文件从 bitbucket 或者我猜是 GitHub
  • git 是否有任何静态接口?

    我一直在寻找一个宁静的 git api 但似乎没有找到 我得到的最接近的是 Github 的 api 来访问一些存储库信息 还有其他的实施吗 Orion Git API http wiki eclipse org Orion Server
  • VSTS:在构建过期的情况下自动变基/合并和重新排队构建验证门

    我们最近对 PR 上的构建验证门进行了更改 这样 如果另一个提交在当前 PR 完成之前进入主分支 则构建会 立即 过期 看here https stackoverflow com questions 49418800 vsts invali
  • 打印“\n”或换行符作为终端输出的一部分

    我正在终端上运行 Python 给定一个字符串string abcd n 我想print它以某种方式使换行符 n in abcd n将是可见的而不是转到下一行 我可以做到这一点而不必修改字符串并添加双斜杠 n Use repr https
  • Gerrit 和 Active Directory

    我正在尝试设置 Gerrit 以使用我们的公司 Active Directory 进行身份验证 我知道很多人都设法让它发挥作用 但它对我来说不起作用 如果我运行一个ldapsearch命令如下我得到了正确的结果 所以我知道我的搜索字符串是正
  • 是否可以检测 http git 远程是智能还是愚蠢?

    我正在我的应用程序中实现一个选项来使用 depth 1制作 git repo 的最小功能克隆 我刚刚意识到愚蠢的 http 传输不支持 depth 我想自动检测 http 远程是愚蠢的还是聪明的 这样我就可以省略 depth与哑 http
  • 如何诊断和修复 git fatal: 无法读取树

    我在用着git管理项目上的文件 并不断遇到这个问题 当我跑步时git status我收到消息 fatal unable to read tree e2d920161d41631066945a3cbcd1b043de919570 据我了解 我
  • 使用Git记录文件复制操作

    当我使用 git mv 在 git 中移动文件时 状态显示该文件已被重命名 即使我更改了某些部分 它仍然被认为几乎是相同的东西 这很好 因为它让我可以跟踪它的历史记录 当我复制文件时 原始文件有一些历史记录 我想将其与新副本关联起来 我尝试
  • 有没有办法导入/导出容器绑定脚本

    我有一个插件 它使用 appscripts gs 以及 html js 和 css 文件 目前我们所做的是我们有一个参考 Google 文档 其中有一个脚本项目包含所有这些源代码 但是除了手动复制和粘贴之外 没有办法在 GIT 中保留源代码
  • Gitolite git 克隆错误

    我正在尝试在我的服务器 Macos 服务器 上设置 gitolite 我按照此处找到的安装文档中的说明进行操作 http sitaramc github com gitolite doc 1 INSTALL html http sitara
  • Git 认为我每次进行小更改时都在重写我的一个文件

    我有一个中等大小的 Java 文件 每次我对一个文件 BuildTable java 进行更改时 Git 都会将其报告为巨大的更改 即使只是一两行 BuildTable java 大约有 200 行 本次提交中的更改仅更改了一行 git d
  • 为什么“git pull”在我的网络服务器上失败?

    我使用 git 来提取站点代码库的更改 文件内部的更改和文件删除是有效的 但是 当我将新文件或目录 不是空的 添加到存储库时 它不会被本地拉到网络服务器 拉动时不会显示错误消息 但在检查该文件时 它不在那里 在线的 bitbucket re
  • 如何仅根据拉取请求在 Jenkins 中运行阶段?

    我现在有一个基于 Jenkinsfile 的管道 其中包含多个阶段 每次提交到 Github 时都会由 webhook 触发 我想在每次提交时保持 构建 和 单元测试 阶段运行 但仅在分支准备拉取请求时运行 集成测试 阶段 我想要的是 st
  • git push --force-with-lease 总是安全吗?

    我一直遵循的规则是 一旦 git 历史记录被推送到远程存储库 就不再修改它 但我想知道交互式变基到推送 force with lease 是否绕过了这条规则 如果强制租约成功 对其他用户来说是否完全安全 或者此策略有任何注意事项吗 预先感谢
  • npm install 的问题(Angular)

    今天我尝试创建一个新项目 所以我使用这个命令 ng new NAME style less 并在我的cmder中弹出错误和警告 所以我卸载了 Roaming npm 和 npm cache 中的节点和文件 然后我安装了node并再次下载cm
  • 有没有一种干净的方法来处理两个以相同内容开头的原始 git 存储库?

    假设我有两个根据相同的初始内容创建的存储库 例如 如果我使用 git 来管理 etc apache2 中的 apache 配置文件 然后我运行git init分别在机器 A 和机器 B 上 此后 我对 machine b 进行了一些配置更改
  • 使用 git 子树时如何添加特定文件夹?

    我正在开发一个复杂的 Ionic 项目 我正在开发的许多组件和提供程序都是通用的 可以在我公司正在进行的其他项目中使用 这在软件开发中很常见 这是我提出的 Git 工作流程 该图显示了分支 my company library repo c
  • BitBucket 应用程序密码:git 命令行访问有哪些权限?

    我了解如何为 BitBucket 创建应用程序密码 如中所述Atlassian 的应用程序密码信息 https support atlassian com bitbucket cloud docs app passwords and 这个答
  • 如何从 Git 存储库中删除选定的提交日志条目,同时保留其更改?

    我想从线性提交树中删除选定的提交日志条目 以便这些条目不会显示在提交日志中 我的提交树看起来像 R A B C D E HEAD 我想删除 B 和 C 条目 以便它们不会显示在提交日志中 但应保留从 A 到 D 的更改 也许通过引入单个提交

随机推荐