为什么以下命令在我的存储库中不一致?

时间:2013-08-27 08:00:15

标签: macos git

在我的存储库中,它具有混合行结尾。 我使用的是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

这里可能出现什么问题?

2 个答案:

答案 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脚本的东西来编辑文件,然后重新发送它们以查看是否会发生这种情况。如果从命令行执行此操作,则应使用正确的正则表达式删除可能导致问题的任何隐藏字符。