Git和IntelliJ的行分隔符问题

20

我正在使用 IntelliJ 15.0.3,并通过 Git Bash(用于提交和推送更改)使用 Git。当我从远程 Git 存储库中的 fetch 文件时,它包含不同的行分隔符(混合模式或称为不一致模式)。我的意思是说,同一个文件中有些行以 CRLF 结尾,而有些行以 LF 结尾。

当我在 IDEA 中进行更改时 - 文件会自动保存,并将所有行分隔符减少(更改)为 IDEA 默认的行分隔符(对我来说是 LF)。

因此,Git 将这些更改视为文件的更改,结果我会提交带有许多这样更改的文件:

- some line
+ some line

由于将 some line [CRLF] 更改为 some line [LF],因此发生了更改。

如何配置 Git 以忽略此更改或如何配置 IntelliJ IDEA 以保留文件的混合模式? 我不想在没有更改时提交更改。


在安装GIT时,有一个选项可以说“按原样检出,按原样提交”,这可能会对您有所帮助? - Vinay Veluri
4个回答

26

安装git时,我们将有选项来设置“原样检出和提交原样”。

如果没有设置,我们可以通过git 配置文件进行设置。

以下命令可帮助您完成此操作。

git config --global core.autocrlf true

根据文档:

    Git can handle this by auto-converting CRLF line endings into LF when you
 add a file to the index, and vice versa when it checks out code onto your 
filesystem. You can turn on this functionality with the core.autocrlf setting. 
If you’re on a Windows machine, set it to true – this converts LF endings into 

更多细节请参考:https://dev59.com/C2kw5IYBdhLWcg3wUI_x - Vadzim
3
我已经添加了git config --global core.autocrlf true,但是每当我提交文件时,我在intellij中仍然遇到这个问题。提交后,intellij编辑器会显示“内容仅在行分隔符上有差异”。 - Srikar
2
是的,这是因为您在获取之后进行了设置。我认为您可以做的最好的事情是将更改复制到其他地方,使用 git checkout -- <some file>git checkout -- *.*(放弃所有更改)丢弃更改并重新获取。 - WesternGun

3

IDEA将更改委托给git进行解决。

因此,您需要在 IDEA 中强制所需的换行在 git 中强制所需的换行

在我的情况下,autocrlf true 已经存在于我的电脑上,但工作副本最初是从同事的共享文件夹中复制而来,那里使用了另一种设置。

可以通过为整个项目或所需的子目录重置 git 索引来解决此问题。但是,如果您已经修改了某些文件并希望保留它们,则可以采用此方法绕过这个问题。


1

相反地,如果您在更改分支时遇到文件返回(例如)到CRLF的问题,即使在更改IntelliJ设置为“行分隔符:LF”后仍然如此。 然后设置“git config --global core.autocrlf false”。

我在Windows上工作时经常遇到这个问题,但是使用配置为Linux机器的repo。


1

尝试将以下配置添加到您的.gitconfig文件中(仅适用于基于Unix的操作系统)

[core]
    autocrlf = input
    eol = lf

您也可以在终端内进行这样的更改:

 git config --global core.eol lf
 git config --global core.autocrlf input

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接