2017-06-20 168 views
-1

即时通讯使用Windows系统将我的更改推送到用户使用macOS提交的git linux服务器,这可能是无效差异更改的问题吗?不会更改的更改会显示为已删除,并稍后以新的方式重新添加。即时通讯使用的崇高,也tryed NetBeans支持相同的行为...Git diff太多错误的更改

Wrong diff output image

+1

[git-diff忽略^ M]的可能重复(https://stackoverflow.com/questions/1889559/git-diff-to-ignore-m) – LuFFy

回答

0

远程回购混合cr/lf lineendings,以为它是unix,现在我只是设置原始的lineending,如果它再次发生。

0

Windows和基于* NIX操作系统使用文件结束字符不同的线路。在你的情况下,你要在你的文件中添加Windows Carriage return字符,并在MacOSX上删除它们。

在您的Sublime上,您可以更改保存的行结束字符以匹配MacOSX的行尾。请参阅is there a way to convert files line ending on saving。这样你就不会看到这些变化。

您也可以指示git自动使用core.autocrlf配置进行转换。请参阅GitHub dealing with line endings

0

GitHub suggests您应该确保只使用\ n作为git处理的回购库中的换行符。有一个选项来自动转换:

$ git config --global core.autocrlf true 

当然,这是说,转换CRLF到LF,而要转换CR到LF。我希望这仍然工程...

然后将您的文件:

# Remove everything from the index 
$ git rm --cached -r . 

# Re-add all the deleted files to the index 
# You should get lots of messages like: "warning: CRLF will be replaced by LF in <file>." 
$ git diff --cached --name-only -z | xargs -0 git add 

# Commit 
$ git commit -m "Fix CRLF" 

Git Config Manual

core.autocrlf

将此变量设置为 “真” 几乎是与在文本文件不是 之外的所有文件上将文本 属性设置为“自动”相同保证被规范化:存储库 中包含CRLF的文件不会被触及。如果要在工作目录中使用CRLF行 结尾,即使存储库不包含 具有标准化的行结尾,也可以使用此设置。该变量可以设置为输入,在 哪种情况下不执行输出转换。

+0

有三种不同的行结束符,但Git只提供他们两个人 (???)。 Windows使用'CRLF',Linux使用'LF'和OS X使用'CR'。因为Git似乎没有这样做,所以我们在makefile中有食谱来标准化行尾。 – jww

+0

将此变量设置为“true”几乎与将文本属性设置为“auto”在所有文件中几乎相同,只是文本文件不能保证被标准化:存储库中包含CRLF的文件将不会被触摸。即使存储库没有标准化的行结尾,如果要在工作目录中拥有CRLF行结尾,请使用此设置。该变量可以设置为输入,在这种情况下不执行输出转换。 – LuFFy

+0

我有四台OS X从10.4到10.10的机器。 (我的测试环境还包括带有GCC 3的Fedora 1和带有Visual C++ 6.0的Windows XP)。 – jww