Git将未修改的文件显示为已修改

vlju58qv  于 2023-03-11  发布在  Git
关注(0)|答案(2)|浏览(377)

设置

  • git版本2.32.0.windows.1
  • 乌龟Git2.13.0.1
  • git配置-l
  • 比较工具:超越比较
http.sslcainfo=C:/Program Files/Git/mingw64/ssl/certs/ca-bundle.crt
    http.sslbackend=openssl
    diff.astextplain.textconv=astextplain
    filter.lfs.clean=git-lfs clean -- %f
    filter.lfs.smudge=git-lfs smudge -- %f
    filter.lfs.process=git-lfs filter-process
    filter.lfs.required=true
    credential.helper=manager-core
    core.autocrlf=true
    core.fscache=true
    core.symlinks=false
    core.editor="C:\\Program Files (x86)\\Notepad++\\notepad++.exe" -multiInst -notabbar -nosession -noPlugin
    pull.rebase=false
    credential.https://dev.azure.com.usehttppath=true
    init.defaultbranch=master
    user.email=***
    user.name=***
    core.quotepath=false
    core.commitgraph=true
    core.longpaths=true
    receive.advertisepushoptions=true
    gc.writecommitgraph=true
    credential.helper=manager-core
    filter.lfs.process=git-lfs filter-process
    filter.lfs.required=true
    filter.lfs.clean=git-lfs clean -- %f
    filter.lfs.smudge=git-lfs smudge -- %f
    submodul.recurse=true
    core.bare=false
    core.repositoryformatversion=0
    core.filemode=false
    core.symlinks=false
    core.ignorecase=true
    core.logallrefupdates=true
    remote.origin.url=***
    remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
    branch.master.remote=origin
    branch.master.merge=refs/heads/master

历史
我们从SVN切换到GIT,然后我们将编码从Windows 1252转换为UTF8。此时一切看起来都很好,但我还是想提一下。这些更改都成功提交了。

错误

git status和TortoiseGit都列出了大量修改过的文件(可能是全部),但这些文件是二进制相同的...
git diff将所有行显示为已删除,将完全相同的行显示为已添加。
git diff -w仅列出非文本文件(jar)。
diff对我来说似乎有点奇怪,因为所有的文件都完全相同(我比较了十六进制数据)。
因为都改了,我拉不动,我同事有时候也有类似的问题。

**EDIT:**我还注意到这个错误只会在我们添加了. git属性的提交之后出现。

*.c     text diff=c
*.cpp   text diff=cpp
*.hpp   text diff=cpp
*.h     text diff=c

如果我注解掉那些行,所有的修改都消失了。如果我注解回那些行,修改仍然消失了。

次尝试

  • git重置--硬
  • git存储
  • 通过TortoiseGit还原

在这些尝试之后,git status和TortoiseGit仍然将这些文件列为已修改...
如果我提交这些文件,这种奇怪的行为就消失了,但是可能会在不同的分支中重新出现。
唯一改变的是文件的最后修改时间戳,时间戳变为实际时间。

问题

为什么所有这些文件都显示为已修改?是不是我遗漏了某个设置?

toe95027

toe950271#

正如@torek在评论中所说:.gitattribute文本设置导致了这个问题。我们提交了那些 modified 文件,之后一切都很顺利。

vjrehmav

vjrehmav2#

工作溶液

我和我的同事也有同样的问题。
找到了一个解决方案,工作在我的个人电脑和我的同龄人的电脑。

在你的git文件夹中

键入以下命令之一:

$ git config core.autocrlf false
$ git config core.filemode false

(You可能需要同时键入两个,根据您的情况,第一个最合适)

**额外的好处:**如果这个解决方案对你有效,并且你想在你的整个电脑(所有git文件夹)上执行,只需在git configure后面加上参数--globalgit config --global core.autocrlf false

相关问题