在我的存储库中,它具有混合行结尾。 我使用的是Mac OS X和git 1.8.3.1
我想重新规范此存储库,以便每个文件都有与.gitattributes文件一致的行结尾。
为此,我查看了最新的更改:
git checkout origin/develop
git reset --hard
git rm -rf .
git rm --cached -rf .
rm .git/index
git checkout HEAD .gitattributes
git reset --hard
git status
现在,git rm --cached -rf .
会导致错误,但我对上述命令非常偏执。 (在我的机器上,这些命令在一行上,忽略退出代码)
我多次重复这个命令。 (即,UP; ENTER; UP; ENTER; UP; ENTER; ...)
大多数时候,我有一个干净的结账,这不是我所期待的。
然而,大约每十次一次,我发现我得到三个文件(似乎正确地重新规范化)。剩下的时间没有重整化。
这种重新规范化的文件(即“被修改”)的输出是:
$ file source/RemoveDuplications.cs
source/RemoveDuplications.cs: UTF-8 Unicode (with BOM) C++ program text, with CRLF line terminators
我的git属性文件有相当数量的条目,但相关的条目在这里:
* text=auto
*.cs text eol=crlf
这里可能出现什么问题?
答案 0 :(得分:1)
看起来你正在做的事情可能过于复杂。您不需要从repo中删除所有文件或手动删除索引。你试过了吗?
git rm --cached -r . # remove everything from the index
git reset --hard # replace files w/ corrected line endings
git add . # stage all changes
git commit -m "Normalize line endings"
如果这对您不起作用,我会重新检查core.autocrlf
和.gitattributes
的值。您可能需要清除它们,重置shell,再次检出repo,然后重置它们以获得所需的行为。
以下是一些可能有用的其他资源:
答案 1 :(得分:-3)
你总是可以使用类似sed脚本的东西来编辑文件,然后重新发送它们以查看是否会发生这种情况。如果从命令行执行此操作,则应使用正确的正则表达式删除可能导致问题的任何隐藏字符。