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

时间:2010-06-28 22:50:45

标签: git

当我将文件复制到git控制目录中的另一个文件的顶部时......我看到git认为整个文件已经改变而不是一个小块...为什么?

这是我的意思的一个例子...... http://github.com/cmodien/fileupdatetest/commit/90309ed099e257cd98218b4504cd2cd3a3a47a27

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

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:4)

正如在Twitter上提到的那样,(@adymitruk)你遇到了行结尾的问题。除非您正在进行跨平台开发,否则AutoCRLF设置可能不会设置为“false”。

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

答案 1 :(得分:3)

有两种常见情况可能发生:

  1. 空白已损坏。您的编辑器可能会将空格转换为TAB或反之:只需将其设置为使用Linux CodingStyle来解决问题。
  2. 线路末端已损坏。将 core.autocrlf 设置为false,并查看有关新的 core.eol 变量的this讨论。

答案 2 :(得分:2)

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

Trying to fix line-endings with git filter-branch, but having no luck

我最初试图遵循这个... http://help.github.com/dealing-with-lineendings/但是有点不清楚在mac / nix上你需要将core.autocrlf设置为输入而不是真的。

另一个轻微的复杂情况是我在git中忽略了一些文件而忽略了我需要修复...所以这个命令:

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

失败了......所以我不得不跑这个......

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

强制它修复被忽略的文件......