38

我有一个有 git repo 的网站。我克隆了 repo,以便我可以在一个目录中开发,然后推送到 repo,然后拉入 live/prod 目录(如果有更好的方法,我会对建议感兴趣,但那不在这个问题的范围)。

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

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>';
> ?>
4

5 回答 5

46

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

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

  • 窗户git config --global core.autocrlf true
  • Unixgit config --global core.autocrlf input

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

git config --global core.whitespace trailing-space,space-before-tab,indent-with-non-tab
于 2012-10-13T19:46:24.907 回答
19

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

于 2012-10-13T19:45:04.603 回答
2

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

于 2012-10-13T19:43:42.677 回答
0

不是解决方案,将对您有所帮助。

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

于 2020-09-24T19:18:28.550 回答
0

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

[core]
    autocrlf = true

运行命令 from是最好的,但如果您觉得更容易,Git Bash可以手动添加上述行。.gitconfig

于 2021-07-28T23:03:22.607 回答