为什么git在将文件复制到其他文件之上时会将整个文件视为已更改?

为什么git在将文件复制到其他文件之上时会将整个文件视为已更改?,git,Git,当我将一个文件复制到git控制目录中的另一个文件之上时。。。我看到git认为整个文件都变了,而不是一个小家伙。。。为什么? 这是一个我的意思的例子 好的。。。我检查了文件上的行尾。。。原始文件具有crlf行结尾。我粘贴在原始文件上的文件有lf行结尾。我想这是有道理的。。。我从windows用户那里得到了原始文件,从mac用户那里收到了新文件 我该如何解决这个问题?正如twitter上提到的,(@adymitruk)你的行尾有问题。AutoCRLF设置可能没有设置为“false”,除非您正在进行跨

当我将一个文件复制到git控制目录中的另一个文件之上时。。。我看到git认为整个文件都变了,而不是一个小家伙。。。为什么?

这是一个我的意思的例子

好的。。。我检查了文件上的行尾。。。原始文件具有crlf行结尾。我粘贴在原始文件上的文件有lf行结尾。我想这是有道理的。。。我从windows用户那里得到了原始文件,从mac用户那里收到了新文件

我该如何解决这个问题?

正如twitter上提到的,(@adymitruk)你的行尾有问题。AutoCRLF设置可能没有设置为“false”,除非您正在进行跨平台开发


解决方案是将其设置为false,修复行尾,将autocrlf设置为false,然后提交。完成此操作后,您将能够复制这些文件,然后只看到实际更改。

有两种常见情况下会发生这种情况:

  • 空格已损坏。您的编辑器可能正在将空格转换为制表符或反之亦然。请将其设置为用于解决问题
  • 线路末端损坏。将core.autocrlf设置为false,并查看有关新core.eol变量的讨论

  • 我用这个来解决这个问题

    我最初试着遵循这个。。。但不太清楚的是,在mac/nix上,您需要将core.autocrlf设置为input,而不是true

    另一个稍微复杂的问题是,我在git ignore中忽略了一些需要修复的文件。。。所以这个命令:

    git diff --cached --name-only -z | xargs -0 git add
    
    失败了。。。所以我不得不运行这个

    git diff --cached --name-only -z | xargs -0 git add -f
    

    要强制它也修复被忽略的文件

    你到底看到了什么让你说git认为整个文件都变了?因为。。。你真的改变了整个文件?或者,除了一个小区域外,新文件是否与旧文件完全相同?当我复制并粘贴从同事那里收到的文件后进行git diff时。。。diff报告整个文件已更改。文件的唯一不同之处是大小相差97字节。内容是一样的。谢谢亚当。。。事实上,我并没有设置那个标志。。。我试图添加这个标志,因为我假设这就是git看到整个文件被修改的原因。。。但将该标志设置为true并运行一系列测试似乎并没有解决问题。我已经从.gitconfig中删除了该标志。这个问题仍然存在。我将编写一个示例并将其放到github上。当我开始使用Git时,这对我来说也很烦人。一旦将autocrlf设置为false,就不会出现该问题。您仍然需要执行一次清理提交,以将行尾设置为其本机状态。