为什么要在 Git 中使用 core.autocrlf=true ?

2023-11-24

我有一个可以从 Windows 和 OS X 访问的 Git 存储库,并且我知道它已经包含一些带有 CRLF 行结尾的文件。据我所知,有两种方法可以解决这个问题:

  1. Set core.autocrlf to false到处,

  2. 按照说明操作here(在 GitHub 的帮助页面上呼应)将存储库转换为仅包含 LF 行结尾,然后设置core.autocrlf to true在 Windows 和input在 OS X 上。这样做的问题是,如果我在存储库中有任何二进制文件:

    1. 没有在 gitattributes 中正确标记为二进制,并且
    2. 碰巧同时包含 CRLF 和 LF,

    他们将会被腐蚀。我的存储库可能包含此类文件。

那么为什么我不应该关闭 Git 的行结束转换呢?网络上有很多关于以下内容的含糊警告:core.autocrlf关闭会导致问题,但很少specific那些;到目前为止我发现的唯一问题是 kdiff3 无法处理 CRLF 结尾(对我来说不是问题),并且某些文本编辑器存在行结束问题(对我来说也不是问题)。

该存储库是我公司内部的,因此我无需担心与具有不同 autocrlf 设置或行结束要求的人员共享它。

只保留行结尾是否还有我不知道的其他问题?


唯一设置的具体原因autocrlf to true are:

  • avoid git status将所有文件显示为modified因为在将基于 Unix 的 EOL Git 存储库克隆到 Windows 存储库时会完成自动 EOL 转换(请参阅issue 83例如)
  • and your coding tools somehow depends on a native EOL style being present in your file:
    • 例如,硬编码代码生成器来检测本机 EOL
    • 其他外部批次(存储库外部),带有正则表达式或代码集来检测本机 EOL
    • 我相信一些 Eclipse 插件可以生成带有 CRLF 的文件,无论平台如何,这可能是一个问题。
    • 您使用 Notepad.exe 进行编码(除非您使用的是 Windows 10 2018.09+,其中记事本尊重检测到的 EOL 字符).

除非你能看到具体的治疗方法must处理原生 EOL,你的情况会更好leaving autocrlf to false (git config --global core.autocrlf false).

请注意,此配置将是local一个(因为配置不会从一个存储库推送到另一个存储库)

如果您希望克隆该存储库的所有用户使用相同的配置,请查看“什么是最好的CRLF用git处理策略?“, 使用text属性中的.gitattributes file.

Example:

*.vcproj    text eol=crlf
*.sh        text eol=lf

注意:从 git 2.8(2016 年 3 月)开始,合并标记将不再在 CRLF 文件中引入混合行结尾 (LF)。
See "让 Git 在其“"

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

为什么要在 Git 中使用 core.autocrlf=true ? 的相关文章

  • 使用 `git for-each-ref` 和 `git log` 显示 origin 上每个远程分支上的最新提交

    完成后git fetch all prune为了从远程存储库获取引用 我现在想查看每个分支上的最新提交origin 命令 git for each ref format refname short grep origin 列出所有 16 个
  • 执行“挤压和合并”后可能出现问题?

    I used Squash and Merge用于合并dev分支到main因为我不想要来自的一些提交消息dev出现在的分支main但现在我发现main比 dev 提前 1 次提交 并且该图显示 两者之间没有联系dev and main 这是
  • Hudson/Jenkins Git 构建所有分支

    我们有很多开发人员创建了我想要构建的功能分支 每晚我们都会运行一个需要在每个分支上运行的代码质量工具 我也不喜欢静态配置 因为分支数量每隔几周就会发生变化 在 Git 配置中有一个字段 分支说明符 默认为空白 如果你放在那里 它将构建来自所
  • 无法将本地更改推送到远程位桶

    我在本地存储库中添加了一个新的自述文件 当我推送到开发分支时 出现此错误 分支 refs heads develop 只能通过拉取请求进行修改 与项目管理员检查您的分支权限配置 到 ssh bitbucket companyname com
  • git pull 出现错误:访问 https://git.foo.com/bar.git 时需要 401 授权

    我的 macbook pro 能够从公司 git 服务器克隆 推送 拉取 我的 cent 6 3 虚拟机出现 401 错误 git clone https git acme com git torque setup error The re
  • Git推送大文件时远端意外挂断

    当我尝试推送到我的 bitbucket 存储库时 出现以下错误 事实上 在 GitHub 中也是如此 数物体 48 完成 增量压缩最多使用 2 个线程 压缩对象 100 38 38 完成 写入对象 100 48 48 1 95 MiB 38
  • 如何使用 API 和 C# 将文件从 azure DevOps 服务器下载到指定路径

    我正在尝试使用 API 从 azure Devops 服务器下载文件 API 给出了成功响应 但是没有下载任何文件 如果我们删除格式参数 我们将获得带有文件链接的响应 单击该文件不会下载 示例代码 var personalaccesstok
  • 使用两个帐户推送到 Git

    我跟着这个tuotrial http code tutsplus com tutorials how to work with github and multiple accounts net 22574关于如何在同一台计算机上拥有两个单独
  • `git add --patch` 和 `--word-diff`

    git add patch提供了一个很好的界面 用于检查未暂存的更改 然后仅暂存下一次提交中需要的更改 很好 除了一件事 没有明显的方法来选择哪个diff视图来使用 特别是 我希望能够配置git add patch以同样的方式向我呈现差异g
  • Git 克隆致命

    我在执行 git clone 时遇到错误 fatal pack has bad object at offset 824775943 inflate returned 1 fatal index pack failed 它仅适用于 Wind
  • Git - 显示远程分支的远程名称

    是否有一个 Git 命令可以显示远程分支的远程名称 目前 我坚持使用 shell utils 从远程分支引用中提取远程名称 例如 echo remote name branch name sed r s 1 remote name 有时出于
  • 在 git 提交消息中使用任何 utf-8 字符是否安全?

    我发现使用 UTF8 字符 例如 很有用 请参阅here http www utf8icons com subsets dingbats 在提交消息中 重构 NewService 添加了更好的服务 OldServiceA 据我所见 它see
  • 如何使用 libgit2 创建空提交?

    我一直在寻找libgit2 C API 参考 https libgit2 org libgit2 但我不知道如何模仿git commit allow empty libgit2 是否有内置方法来创建空提交 如果没有 git 如何在底层创建一
  • 将 svn 存储库添加到现有的 git 存储库中?

    我知道你可以使用 git svn init 来跟踪 svn 存储库 但这是为了你想创建一个全新的存储库 我的情况是 我目前已经有一个现有的 git 存储库 并且希望通过将 svn 存储库设为我当前 git 存储库中的远程分支来跟踪 svn
  • 有关多个远程存储库的 Git 状态

    我有一个脚本 如果我忘记在 40 多个存储库中提交或推送一些代码 它会通过电子邮件向我发送提醒 在我的两个项目中 我遵循了这些帖子中的答案 其中我设置了 git push 来推送到多个存储库 从多个远程位置拉 推 https stackov
  • 如何让 git 和 copSSH 在正确的目录中查找密钥?

    我刚刚安装了 Windows 版 copSSH 当我启动它时 我得到一个目录C copSSH home Nick ssh其中有我的酒吧和私钥 当我通过 Cygwin bash 窗口访问此目录时 使用 ssh 用户 主机 我很高兴地登录了 但
  • git for-each-ref - 按年龄过滤结果

    我正在使用以下命令here https stackoverflow com a 39251131 5812876 git for each ref format color cyan authordate format m d Y I M
  • git 命令显示所有(轻量级)标签创建日期

    是否有一个衬垫可以向我显示所有 git 轻量级标签的创建日期 就像是 git show tags format date 我在这个发现link http osdir com ml git 2009 05 msg01404 html适合我需求
  • 无法将 git add origin git@anything 与新的 git 目录一起使用

    我有一个项目 我正在生成许多提交 因此它占用的空间正在快速增长 由于我有一个 gitlab 页面来推送提交 因此我决定最好删除本地 git 目录中的这些旧提交 因为我始终可以从 gitlab 获取它们 为此 我只需删除本地 git 目录 然
  • EGit(Eclipse git 插件)可以使用 SSH 密钥代替用户名和密码吗?

    我需要提交的 git 中央存储库是使用 SSH 密钥配置的 我的用户名是jmglov 但是当我执行 git 操作时 例如git clone 我使用这个配置 jmglov kitiara cat git config remote origi

随机推荐