我有一个非常奇怪的git错误,让我完全不知所措。它并不是一个主要的阻碍者,但它总是在工作中非常恼火。
我有一个存储库的工作副本,并且在所述工作副本中,每次我从一个分支切换到另一个分支时,Git告诉我,在切换完成后,我有本地修改。更多细节:
这可能会发生什么?我认为它可能与文件属性有关,但我不知道如何检查它。
更新:
VonC是正确的,这是问题的线路结束。更具体地说,如果您将core.autocrlf
设置为true,但是存储库中以前使用Windows行结尾提交的任何文件,那么您将看到此问题。无法重置更改的原因是签出文件会修改它,因为Git确定您的文件的工作副本与您的文件的工作副本不同我现在要承诺。令我感到困惑,我知道。
无论如何,我能够通过一个巨大的提交来解决这个问题,这个提交将存储库中的所有行结尾设置为Unix,幸运的是,结果并没有像你想象的那么大。我按照这篇文章中的说明进行了操作:Trying to fix line-endings with git filter-branch, but having no luck,特别是Russ Egan的答案,这对我来说效果最好。
答案 0 :(得分:1)
只需确保在下一次结帐前输入(一次):
git config --global core.autocrlf false
这将避免这种设置(默认情况下使用msysgit设置为true)的自动eol(行尾)转换。
.gitattributes
文件是声明要管理其eol的文件的更好地方。
参见" git replacing LF with CRLF"有关该设置的更多信息。
答案 1 :(得分:0)
正如我最初发布在this question ...
我有一些幻影更改的文件显示为已修改,但实际上是相同的。
运行此命令有时有效:
(关闭git' s" smart"但通常无益的线路结束转换)
git config --global core.autocrlf false
git config --local core.autocrlf false
但是在另一个案例中,我发现它是由于根目录中的.gitattributes
文件存在一些行结束设置,即使在某些文件被转动时也尝试对autocrlf
应用.gitattributes
关闭。这实际上并没有用,所以我删除了char[] managedArray = new char[yourDataObject.FileNameLength];
Marshal.Copy(yourDataObject.FileName, managedArray, 0, managedArray.Length);
// and now build your string with your managed array
// using Stringbuilder order something like the below
string myString = new string(managedArray);
,已提交,并且该文件不再显示为已修改。