次のコマンドがリポジトリ内で矛盾しているのはなぜですか? 質問する

次のコマンドがリポジトリ内で矛盾しているのはなぜですか? 質問する

私のリポジトリでは、行末が混在しています。私は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 .エラーが発生しますが、私は上記のコマンドに非常に神経質になっています。(私のマシンでは、これらのコマンドは 1 行で、終了コードは無視されていました)

コマンドを何度も繰り返します。(つまり、UP; ENTER; UP; ENTER; UP; ENTER;...)

ほとんどの場合、チェックアウトは問題なく行われますが、これは私が期待していたことではありません。

ただし、およそ 10 回に 1 回、3 つのファイル (正しく再正規化されていると思われる) が取得されます。残りの回数では、再正規化は行われません。

再正規化された(つまり、「変更された」)ファイルの出力は次のようになります。

$ 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

ここで何が間違っているのでしょうか?

ベストアンサー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。必要な動作を得るには、これらをクリアし、シェルをリセットし、リポジトリを再度チェックアウトしてからリセットする必要がある場合があります。

他にも役立つかもしれないリソースをいくつか紹介します:

おすすめ記事