GIT在切换分支时抱怨随机更改的文件

时间:2013-10-03 05:56:09

标签: git whitespace

开始
git status
# On branch master
nothing to commit, working directory clean

然后切换到另一个分支

git checkout somebranch

切换到新分支并运行git status git后,有时会抱怨随机更改的文件。如果我用git diff区分文件,它将首先显示整个文件,所有行都被删除然后再添加

- someline
- someotherline
+ someline
+ someotherline

然后运行git diff --ignore-space-at-eol .将不会显示任何文件更改导致我相信git repo中某处存在行结束问题,因为如果我使用我选择的合并工具对文件进行二进制比较(Beyond Compare )它告诉我文件是二进制相同的,即使git抱怨它们不同,我甚至做了十六进制比较,它们确实相同,那么为什么git看到它们被改变了?

存储库位于旧的svn存储库上,该存储库是通过遵循github准则https://help.github.com/articles/importing-from-subversion进行转换的,之后我们将.gitattributes文件添加到解决方案中,如下所示:

# .gitattributes
# Auto detect text files and perform LF normalization
* text=auto

# Custom for Visual Studio
*.cs     diff=csharp
*.sln    merge=union
*.csproj merge=union
*.vbproj merge=union
*.fsproj merge=union
*.dbproj merge=union

# Standard to msysgit
*.doc    diff=astextplain
*.DOC    diff=astextplain
*.docx diff=astextplain
*.DOCX diff=astextplain
*.dot  diff=astextplain
*.DOT  diff=astextplain
*.pdf  diff=astextplain
*.PDF    diff=astextplain
*.rtf    diff=astextplain
*.RTF    diff=astextplain

添加.gitattributes文件后,我们还遵循githubs指南来修复https://help.github.com/articles/dealing-with-line-endings

中的行结尾

团队中的每个人都在Windows上运行,团队中的每个人都在使用core.autocrlf = true并且每个人都至少使用

git --version
git version 1.8.3.msysgit.0

这里有什么问题? git抱怨的文件是完全随机的,它发生在团队中的每个人身上。此外,使用git checkout文件恢复它所抱怨的文件是不可能的 - 这些文件并没有真正改变。

2 个答案:

答案 0 :(得分:4)

在我的软件仓库中添加Visual Studio生成的默认.gitattributes文件后,我遇到了同样的问题。您可以通过在.gitattributes中注释掉以下行来修复它:

# * text=auto

仅提交此文件,所有其他虚假更改文件现在将从您的本地更改列表中消失。

注意:auto选项指示git存储内部结束LF行的所有文件。当您签出文件时,行结尾将转换回CRLF,因此我们运行git diff,它会看到来自库的LF和结帐版本的CRLF之间的差异。对我来说似乎是一个错误。

答案 1 :(得分:0)

首先,不要混用旧方案(core.autocrlf)和新方案(.gitattributes)。

要在本地修复有问题的文件,您可以执行以下操作:

git rm --cached -r .
git reset --hard