diff返回整个文件以获取相同的文件

时间:2012-10-13 19:41:44

标签: git diff

我有一个有git repo的网站。我克隆了repo,这样我就可以在一个目录中开发,然后推送到repo,然后拉入live / prod目录(如果有的话,会有更好的方法来提供建议,但这是在这个问题的范围)。

我在实时目录中执行了以下操作来推送所有最新更改:

git add .
git commit -a // added a message
git push

然后我在dev目录中执行了以下操作:

git clone git@bitbucket.org:user/repo.git

然后我打开了两个文件,prod / root / test.php和dev / root / test.php,它们看起来完全相同。但是,当我执行以下diff命令时,它输出了整个文件:

diff prod/root/test.php dev/root/test.php

我很困惑,为什么diff会输出整个文件,如果它们是相同的......我也试过谷歌搜索这个并且找不到其他人有这个问题。也许这是一个行结尾问题或字符编码问题,它们看起来相同,但它们实际上是不同的,当你推送到它们的回购时git / bitbucket转换它?这是我能想到的唯一一件事......或者我错过了一些非常明显的东西。

这是输出:

1,3c1,3
< <?
< echo '<p>Hello world!</p>';
< ?>
---
> <?
> echo '<p>Hello world!</p>';
> ?>

5 个答案:

答案 0 :(得分:33)

这似乎是一个空白问题,为了将来避免它们,你可以设置Git来规范化它们。

Windows和UNIX系统不使用相同的行结尾,为了防止基于这些发生冲突,您应该以这种方式设置git config:

  • Windows git config --global core.autocrlf true
  • Unix git config --global core.autocrlf input

接下来,为了确保我们只提交理想的空白规则,您可以设置此config option

git config --global core.whitespace trailing-space,space-before-tab,indent-with-non-tab

答案 1 :(得分:13)

很可能是线路终止。试试git diff --ignore-space-at-eol。而对于普通(不是git)差异,它是diff -b

答案 2 :(得分:2)

这通常意味着行结尾不同。大多数diffin程序允许您忽略行结尾的差异。你的允许吗?

答案 3 :(得分:0)

不是解决方案,将为您提供帮助。

git diff --no-ext-diff --ignore-space-change -- <path>->您只能在git bash中查看代码更改。

答案 4 :(得分:0)

扩展@SimonBoudrias 的出色回答,git config --global core.autocrlf true ask 的 git 在结帐时将行尾从 LF 转换为 CRLF。对于在 Windows 上工作的开发人员非常有用。此命令会将以下内容添加到 %HOMEPATH%\.gitconfig

[core]
    autocrlf = true

最好从 Git Bash 运行命令,但如果您觉得更容易,可以将以上几行手动添加到 .gitconfig 中。