26

在我的存储库中,它有混合行结尾。我正在使用 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 .会导致错误,但我对上述命令非常偏执。(在我的机器上,这些命令在一行上,忽略了退出代码)

我多次重复这个命令。(即,向上;进入;向上;进入;向上;进入;...)

大多数时候,我都有一个干净的退房,这不是我所期望的。

但是,大约每十次,我发现我得到了三个文件(它们似乎被正确地重新规范化了)。其余时间没有重整化。

这样一个被重新规范化(即,被“修改”)的文件的输出是:

$ 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

这里可能出了什么问题?

4

2 回答 2

1

看起来你正在做的事情可能过于复杂。您不需要从存储库中删除所有文件或手动删除索引。你有没有尝试过:

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,然后重置它们以获得您想要的行为。

以下是一些可能有帮助的其他资源:

于 2013-11-16T08:01:25.197 回答
-3

您总是可以使用 sed 脚本之类的东西来编辑文件,然后重新提交它们以查看这种情况是否继续发生。如果您从命令行执行此操作,您应该使用正确的正则表达式,能够提取任何可能导致您的问题的隐藏字符。

于 2013-10-28T22:40:19.527 回答