Git diff太多错误的变化

时间:2017-06-20 10:55:30

标签: linux git macos sublimetext3 netbeans-7

我使用Windows系统将我的更改推送到git linux服务器,用户使用macOS提交,这可能是无效差异更改的问题吗?未更改的更改将显示为已删除,稍后会以新的方式重新添加。即时通讯使用sublime并尝试使用相同行为的netbeans ...

Wrong diff output image

3 个答案:

答案 0 :(得分:0)

基于Windows和* nix的操作系统在文件中使用不同的行结束字符。在您的情况下,您将在文件中添加Windows Carriage返回字符,在MacOSX上将其删除。

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

您还可以指示git使用core.autocrlf配置自动执行转换。见GitHub dealing with line endings

答案 1 :(得分:0)

GitHub suggests你应该确保只使用\ n作为git-handling repos中的换行符。有一个自动转换选项:

$ 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

     

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

答案 2 :(得分:0)

远程仓库混合了cr / lf lineendings,认为它是unix,现在我只是设置原来的lineending如果它再次发生。