显示整个文件的Git被修改,而不是显示修改过的小部分代码

时间:2015-06-10 09:53:51

标签: git

我在谷歌搜索了一个答案但没有提出任何答案。

在Windows中,我通过eclipse配置了git。当我尝试通过团队将修改后的文件提交到我的分支时 - > commit,它只显示已修改的修改后的行,但每当我的负责人尝试将更改合并到分支时,它会将整个文件显示为已更改

有人能告诉我什么会出错吗?

提前致谢。

2 个答案:

答案 0 :(得分:5)

这很可能是一个行结束问题。 Windows以CRLF结束行,而其他操作系统以LF结束行。当人们使用两种类型的操作系统更改存储库中的文件时,他们各自的编辑者将文件的每一行更改为其特定的行结尾的这一事实会导致您看到的行为。

即使团队中的每个人都使用Windows,Git尝试“修复”此问题也可能 导致此问题出现。这是因为告诉Git解决此问题的一种方法是将core.autocrlf设置为true。这样做会导致Git在提交时将每个CRLF转换为LF,并在结帐时将每个LF转换为CRLF。问题是当项目的不同开发人员将core.autocrlf设置为不同的值时。因此,假设您将core.autocrlf设置为true,而另一位开发人员将其设置为false。当您提交文件时,Git将执行行结束转换,并且repo将包含LF行结尾。当其他开发人员检出文件时,不会进行任何转换,因此其本地文件中的每一行(具有CRLF)都将与存储库中的不同。

对此的解决方案是不依赖core.autocrlf来确定是否已完成任何此规范化,因为这可能因机器而异。相反,您希望在repo的根目录中有一个.gitattributes文件,用于确定是否已完成规范化。你想要什么取决于你的整个团队是否使用Windows。

如果您的整个团队使用Windows :在这种情况下,我建议禁用行结束规范化,因为不需要它。为此,请将* -text放入.gitattributes文件中。

如果您的团队使用Windows以外的其他操作系统:在这种情况下,您确实需要对行结尾进行规范化。为了使每个人都保持一致,请将* text=auto放入.gitattributes文件中。

答案 1 :(得分:1)

以下内容已在Eclipse中为我解决了该问题

  1. 窗口->首选项->团队-> Git->配置
  2. 点击添加条目按钮
  3. 键= core.autocrlf,值= false
  4. 重启日食
  5. 将有问题的文件重置为以前的版本
  6. 再次将更改合并到文件
  7. 提交。