更新Git索引失败,LF将被CRLF替换?

8
我正在使用git-gui进行版本控制并将它们推送到远程位置。当我尝试重新扫描文件以查看更改时,出现了这个消息,我不确定这意味着什么。请帮忙解决一下。
Updating the Git index failed.  A rescan will be automatically started to resynchronize git-gui.

warning: LF will be replaced by CRLF in bin/jarlist.cache.
The file will have its original line endings in your working directory.
warning: LF will be replaced by CRLF in gen/com/click4tab/pustakalpha/BuildConfig.java.
The file will have its original line endings in your working directory.
warning: LF will be replaced by CRLF in proguard-project.txt.
The file will have its original line endings in your working directory.
warning: LF will be replaced by CRLF in project.properties.
The file will have its original line endings in your working directory.
warning: LF will be replaced by CRLF in res/layout/start_test.xml.
The file will have its original line endings in your working directory.
warning: LF will be replaced by CRLF in res/menu/start_test.xml.
The file will have its original line endings in your working directory.
warning: LF will be replaced by CRLF in src/com/click4tab/pustakalpha/StartTestActivity.java.
The file will have its original line endings in your working directory.

可能是为什么会显示“更新Git索引失败”的重复问题。 - T.Todua
4个回答

4
解决方案是接受这种行为。你正在使用Windows,所以autocrlf应该设置为true。这样可以保证Git内部记录的行尾一致性。警告提示可以让你在提交时发现是否意外破坏了二进制文件。
点击继续。如果你想防止这种情况再次发生,需要取消暂存这些文件,然后更正行尾并重新暂存。可以通过在编辑器中将文件的行尾更改为CRLF/Windows,或将这些命令行工具放入你的system32目录,以便在任何命令提示符下对这些文件执行unix2dos some_file.java命令。

3

我遇到了类似的问题,决定仔细查看我的配置。

Windows / Linux / MAC上的换行符:

  1. MAC OS X之前:\r = CR(回车符)
  2. MAC OS X / UNIX:\n = LF(换行符)
  3. Windows:\r\n = CR + LF

不要惊慌。Git可以为您处理平台之间的转换。

Git应该将行结束符存储为LF在repo中。

将其设置为;

TRUE - 如果您使用的是Windows:

git config --global core.autocrlf true

当你检出代码时,这将 LF 结尾转换为 CRLF。

输入 - 如果你使用 MAC/LINUX:

你不需要进行任何转换,Git 使用 LF,而你的 MAC 使用 LF。

但是,你可以告诉 Git 在经过一次时转换任何 CRLF:

git config --global core.autocrlf input

False - 不推荐使用

虽然我不建议这样做,但为了解释起见:

如果你是一名只在Windows机器上工作的开发人员,并且你百分之百确定你永远不会与Mac用户合作:

git config --global core.autocrlf false

更新:

如下方评论所述,我没有提到可以使用.gitattributes来为项目设置默认设置。

如果有时间,这里是文档链接:http://git-scm.com/docs/gitattributes


为什么不在.gitattributes文件中检查,而不是对任何事情都100%确定呢?这样就不需要每个人都配置一些神秘的东西了。 - Edward Thomson
我认为“.gitattributes”不会告诉你谁是你的同事,以及你是否独自在项目上工作。在回答此类问题之前,请再读一遍句子。请记住,人们在这里是来帮助你的。 - Andrew
不要使用 core.autocrlf,而是使用 .gitattributes。这样可以告诉在同一项目上工作的所有人如何处理行尾,而不是试图确保每个人都有相同的配置设置。 - Edward Thomson
人们可以自由选择他们喜欢的解决方案。发布一个答案,解释如何配置.gitattributes以及其优点。这将更加高效。我喜欢在本地拥有清晰的配置,无论当前项目是否有.gitattributes。 - Andrew

1
在Unix系统中,行末以换行符(LF)表示。在Windows中,一行由回车符(CR)和换行符(LF)表示,即(CRLF)。当你从上传自Unix系统的git获取代码时,它们只会有一个LF。
如果你想关闭这个警告,在git命令行中输入以下内容。
git config core.autocrlf true

如果您想让Git做出智能决策,处理这个问题,请阅读文档。
以下是代码片段。
格式和空格
格式和空格问题是许多开发人员在协作时遇到的一些更加令人沮丧和微妙的问题,特别是跨平台。由于编辑器会悄悄地引入它们,因此很容易导致补丁或其他合作工作引入微妙的空格更改,如果您的文件曾经接触过Windows系统,则可能替换其行尾。 Git有一些配置选项可帮助解决这些问题。
core.autocrlf

如果你在Windows上编程并与不使用Windows系统的人合作(或反之),你可能会遇到换行符问题。这是因为Windows在其文件中使用回车符和换行符来表示新行,而Mac和Linux系统仅使用换行符。这是跨平台工作中微妙但极其烦人的事实;许多Windows上的编辑器会默默地将现有的LF格式的换行符替换为CRLF格式,或者在用户按下回车键时插入两个换行符。
Git可以通过将CRLF格式的换行符自动转换为LF格式来处理此问题,当您将文件添加到索引时,它会自动执行此操作,而在将代码检出到您的文件系统上时则相反。您可以通过设置core.autocrlf属性来启用此功能。如果您在Windows机器上,请将其设置为true - 这将在您检出代码时将LF格式的换行符转换为CRLF格式。
$ git config --global core.autocrlf true

如果您使用的是 Linux 或 Mac 系统,而且使用 LF 行尾符,那么在检出文件时,您不希望 Git 自动将其转换。但是,如果意外引入了 CRLF 结尾的文件,则可能需要 Git 进行修复。您可以通过设置 core.autocrlf 为 input,告诉 Git 在提交时将 CRLF 转换为 LF,但反过来不转换。请注意,保留 HTML 标签。
$ git config --global core.autocrlf input

这个设置可以让Windows的检出文件保留CRLF结尾,而在Mac和Linux系统以及库中保留LF结尾。 如果你是一个只做Windows项目的Windows程序员,那么你可以关闭此功能,通过将配置值设置为false来记录回车符到库中。
$ git config --global core.autocrlf false

-3
这行代码应该可以防止出现警告:
git config core.autocrlf false

如果您想要更详细的答案,了解如何在哪里输入这行代码,请查看此处: https://dev59.com/_FDTa4cB1Zd3GeqPMtyW

2
糟糕的建议,“autocrlf”需要保持提交中的行结束符在不同平台上保持一致。你有没有尝试过解决冲突,其中只有几行实际上发生了变化,但它们被隐藏在一堆行结束符“更改”中? - Walf

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