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

Macos 为什么我的存储库中的以下命令不一致?,macos,git,Macos,Git,在我的存储库中,它有混合的行结尾。 我正在使用MacOSX和Git1.8.3.1 我想重新规范化这个存储库,以便每个文件都有与.gittributes文件一致的行结尾 为此,我查看了最新的更改: 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 stat

在我的存储库中,它有混合的行结尾。 我正在使用MacOSX和Git1.8.3.1

我想重新规范化这个存储库,以便每个文件都有与.gittributes文件一致的行结尾

为此,我查看了最新的更改:

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.
将导致一个错误,但是我对上面的命令非常怀疑。(在我的机器上,这些命令在一行,忽略退出代码)

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

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

然而,大约每十次,我会发现我得到三个文件(它们似乎被正确地重新规范化了)。剩下的时间没有重整化

重新规范化(即“修改”)的此类文件的输出为:

我的git属性文件有相当多的条目,但相关条目如下:

* text=auto
*.cs text eol=crlf

这里可能出了什么问题?

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

看起来您正在做的事情可能过于复杂。您不需要从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"
如果这对您不起作用,我会重新检查和
.gittributes
的值。您可能需要清除这些,重置您的外壳,再次签出回购协议,然后重置它们以获得您想要的行为

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

  • 一个需要考虑多个答案的问题
  • A关于这种方法与git过滤器分支的优缺点

我应该指出,显示为已修改的文件与显示为已修改的文件相同:
find-iname'*.cs'-exec unix2dos'{}\很明显,git的正常化并不总是发生,我感到困惑。这个错误仍然发生在git版本1.8.4(来自自制)中。您是否有任何其他带有并发eol指令的
.gittributes
?你的
git config core.autocrlf
是否设置为
false
?你有没有把测试存储库放在一起?马特:我想修复存储库本身的行尾,而不仅仅是工作副本。
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"