我对Git很缺乏经验,这个让我感到困惑:
我只是将我的工作副本切换到另一个分支(一个简单的git checkout master),然后立即git status告诉我有关数百个已更改的文件.然而,这一切都与线路结束有关; a git diff --ignore-space-at-eol给了我很多警告:
warning: CRLF will be replaced by LF in src/.../somefile.js.
The file will have its original line endings in your working directory.
Run Code Online (Sandbox Code Playgroud)
我一般认为在版本化的文本文件中使用DOS样式的行结尾是一个坏主意,但这是他们最初提交的内容; 我在一个Linux机器中完成了这个,我得到的文件有CRLF行结尾.
在我的情况下清理的最佳方法是什么?我应该更改每个文件的行结尾并提交吗?
如何配置Git以避免将来出现这种情况?
我是git的新手,我对这个错误消息感到困惑,这个消息在我提交时不断弹出:
"警告:LF将被New Full Car.mdl中的CRLF替换.该文件将在你的工作目录中有其原始行结尾. "
这是什么意思?如何防止它定期向我显示错误?
这一行结束问题让我疯狂......
背景:从历史上看,我使用的是core.autocrlf设置,但我发现我遇到了不同的repos表现不好的问题(我在Windows上工作,我有一些需要LF结尾的repos和一些需要CRLF结尾的repos).所以我试图摆脱它并在每个存储库中使用.gitattributes(我希望Git只是闭嘴并让我管理行结尾!).所以,我现在有core.autocrlf=false和一个.gitattributes看起来像这样对我工作的一个Visual Studio项目:
# Don't do any end of line normalization.
* -text
# Always treat these files as binary. Not strictly necessary, but can't hurt.
*.png binary
*.gif binary
*.jpg binary
*.jpeg binary
*.dll binary
*.doc binary
*.docx binary
*.xls binary
*.xlsx binary
*.pdf binary
Run Code Online (Sandbox Code Playgroud)
我已经使用unix2dos将repo中的所有文件强制为CRLF结尾并确认它们在工作目录中具有正确的行结尾,并将它们全部检入.是的我遵循了这里的建议尝试使用git过滤器修复行结尾 - 分手,但没有运气
这几乎是完美的.
问题是每当我更改文件时,git报告它在更改的行上有行结束差异,例如,如果原始行是
string s;
Run Code Online (Sandbox Code Playgroud)
并且更改的行是
string sucks;
Run Code Online (Sandbox Code Playgroud)
git diff将更改显示为
string sucks;^M
Run Code Online (Sandbox Code Playgroud)
看起来Git认为repo中的文件仍然有LF结尾(因为它们在过去被标准化了?).^ M会产生大量的视觉噪音,我不确定这是否是其他任何问题的症状.我不明白为什么Git会报告差异,因为我在之前的提交中检查了所有带有CRLF结尾的文件,实际上是在此之前的提交.
那么为什么我会得到这些"假的"差异,我怎么能摆脱它们呢?
我的同事有一个问题,即他的提交会将每个文件都包含在存储库中而不仅仅是更改的文件中.文件内容完全相同,但我们的私有Github存储库中的更改集显示删除了所有先前版本的行,并添加了所有"新"版本的行,即使实际上没有任何更改.这也发生在二进制文件中,并且实际文件从第一个版本到下一个版本是相同的.
是什么导致这种情况以及如何预防?
我面临一个奇怪的情况git.我只是在一个长文件中编辑了几行但是当我去提交更改时,我看到git只是用红色突出显示整个文件内容.怎么了 ?
我正在使用git的Windows GUI
编辑:我现在记得的一件事是我在上次提交时将.csproj添加到gitignore列表中.这有什么影响吗?