【问题标题】:git tells me that my files are changed, but I can't see any differencegit 告诉我我的文件已更改,但我看不出有任何区别
【发布时间】:2015-04-29 00:25:51
【问题描述】:

我刚刚安装了最新的 Git (1.9.5),突然它告诉我我的工作树不干净(更改没有暂存),但我在我的任何文件中都看不到任何更改任何差异工具(我尝试了 Tortoise 和 Visual Studio 的内置)。当我运行 git status 时,它说:

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   inc/i_lab_orders.asp
        modified:   lab_order_list.asp
        modified:   slib/lab_order_lib.asp

但是,Git GUI 的 diff 工具告诉我所有行都已更改,但我无法发现任何差异。与 git bash 的 diff 相同。

运行git reset --hard 根本没有帮助——命令执行没有任何问题,但最后我仍然有相同的“更改”文件。

更新:core.autocrlf 为假,core.fileMode 也为假。我还注意到,报告更改的文件正是上次提交时提交的文件。

我在 Windows 上。

【问题讨论】:

  • 我猜这和autocrlf有关。
  • All lines are changed 是行尾问题的一个很好的指标

标签: git diff tortoisegit


【解决方案1】:

欢迎来到地狱。享受您的住宿:-)

你看不到的区别是行尾。简而言之,您已经告诉 Git 将所有行尾转换为 Windows 或 Unix,并且 repo 中有一个文件在 repo 中有不同的行尾。

当您签出文件时,Git 会进行转换,创建一个看起来正确的本地文件。当您执行diff 时,Git 不会转换(因为磁盘上的文件必须是正确的,为什么它会转换存储库中已有的内容?)现在您会得到不存在的差异。

解决方案:确保为每个可以push 的开发人员正确配置 Git,以正确的结尾提交一次文件,并为创建带有错误行结尾的文件的任何人戴上傻帽。

相关:

【讨论】:

  • 谢谢,这是我的第一个想法。但是,core.autocrlf 设置为 false(刚刚检查)。一直都是。升级后问题开始出现。
  • Eclipse 的 eGit 等一些工具会忽略关键的行尾设置。所以第一步是检查文件,然后找出为什么它有错误的行尾(去找提交文件的人并检查他们的工具)。
  • Aaron,这个人就是我自己,我很确定行尾是相同的——用 Tortoise diff 工具检查。
  • 除非您将 Git 配置为突出显示空白更改,否则您不会在大多数工具中看到行尾。看到这个问题:stackoverflow.com/questions/3920650/…
【解决方案2】:

更改也可能是文件 mod,但你可以告诉 git 忽略这样的东西。

git config core.fileMode false

我建议你使用gitk

在ubuntu上只是

sudo apt-get install gitk

【讨论】:

    【解决方案3】:

    通过手动删除 .git\rebase-merge-failed 文件夹来修复它。感谢大家帮助我。

    更新我还怀疑原因是我的 .gitattributes 文件中有text=auto

    【讨论】:

      猜你喜欢
      • 2021-04-23
      • 2013-06-07
      • 2013-03-20
      • 2016-08-13
      • 1970-01-01
      • 2011-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多