我有一个有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>';
> ?>
答案 0 :(得分:33)
这似乎是一个空白问题,为了将来避免它们,你可以设置Git来规范化它们。
Windows和UNIX系统不使用相同的行结尾,为了防止基于这些发生冲突,您应该以这种方式设置git config:
git config --global core.autocrlf true
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
中。