入力するとgit status
、次のように表示されます。
# On branch master
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: DIR/a
#
ただし、作業ディレクトリでは、このファイルが実際に呼び出されていることがわかります(ではなくdir/a
小文字に注意してください)。dir
DIR
質問:この変更されたファイルをステージング領域に追加してコミットしたいのですが、gitがそれをと見なす方法とは対照的にa
、作業ディレクトリ(を示していますdir/a
)にあるままにしておきたいです。これどうやってするの?DIR/a
重要な注意点:
残念ながら、実際には作業ツリーに存在しないgit mv DIR/a dir/a
ため、単純に存在することはできません。DIR/a
現在、私の.git/config
ファイルにはが表示ingorecase = true
されているので、これをfalseに設定する必要があることはわかっています。ただし、このフラグを変更する以外に何もしなかった後、git status
これにより次のことが明らかになります。
# On branch master
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: DIR/a
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# dir/
gitはコンテンツのみを追跡し、ignorecaseを切り替えると、gitは新しいファイルが追加されたと見なすため、これを予期していました。残念ながら、gitは、実際には1つしかないのに、変更されたファイルが2つあると考えています。最近作成したものと同じ差分を使用して、の代わりに(作業ディレクトリにあるように)git status
単純に表示したいと思います。dir/a
DIR/a
a
追記
そもそもこのような不安定な状況がどのように発生したのか知りたい場合は、ディレクトリのケースの名前を最初にからに変更したときに犯したばかげた間違いを再現することができましDIR
たdir
。これがこの問題の解決に役立つと思われる場合は、誤ってgitを混乱させた方法を明らかにする編集を行っていただければ幸いです。mv
(これには、の代わりに誤ってヒットし、フラグgit mv
に気づかずにそのままにしておくことが含まれます)。ignorecase
ignorecase=true