从
开始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文件恢复它所抱怨的文件是不可能的 - 这些文件并没有真正改变。
答案 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