git add --renormalize 不会以正确的行结尾重新签出我的文件

问题描述 投票:0回答:1

我有一个在 Windows 和 Linux 之间使用的存储库。

目前有些文件,例如文件

myfolder/myfile.txt
以 CRLF (DOS) 行结尾存储,并以 CRLF linedendigs 签出。

在我当前的计算机 (Linux) 上 我希望所有文本文件始终以 LF (Linux) 行结尾签出。为此,我做了以下工作:

  1. 我确保

    git config --get core.autocrlf
    输出
    true
    。 (此存储库中未设置任何内容;它是全局值。)

  2. 我创建了一个

    .gitattributes
    文件,其中包含以下内容:

    # Set the default behavior
    * text=auto
    
  3. 我跑了

     git add --renormalize .
    

然后我检查了

git status

它告诉我:

On branch main
Your branch is up to date with 'origin/main'.

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        .gitattributes

nothing added to commit but untracked files present (use "git add" to track)

文件

myfolder/myfile.txt
仍然有CRLF行结尾。

这里出了什么问题?我希望所有文本文件都以 LF 行结尾签出,以及我如何理解文档

--renormalize
选项正是这样做的。 - 但我的情况并非如此。

git cross-platform newline gitattributes core.autocrlf
1个回答
0
投票

如果您有

core.autocrlf = true
并且您的文件设置了
text
属性(直接或通过
text=auto
),则在执行签出时,您将始终在工作目录中获得该文件的
CRLF

这对于“autocrlf”这个名称来说是有意义的,因为它可以为 Windows 开发人员在 checkout 执行自动 CRLF 转换,但它也确保在签入时将任何 new 文件转换为 LF,以避免 Windows 开发人员引入 LF在回购协议中。

您当前的配置如下图中的红色箭头标记。

enter image description here

根据您提供的信息,我将假设 git 存储库中

myfolder/myfile.txt
的行结尾已经是 LF,这可以解释为什么当您执行
git status
时看不到任何更改。

现在,如果您想解决此问题并将文件签出为 LF,您只需将 autocrlf 切换为 false:

git config --global core.autocrlf false

这会让你处于绿色的情况:

enter image description here

关于

core.eol
的值,你有两个选择:

  1. 不指定它相当于拥有
    git config --global core.eol native

或者(我认为更好):

  1. git config --global core.eol lf

如果您选择选项 2,即使在 Windows 上,所有文件也将使用 LF 签出。考虑到所有现代 Windows 程序都可以处理 LF。这不应该是一个问题,并且您不会遇到任何 CRLF 问题,从而导致 docker 容器出现问题。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.