質問: Gitでプロジェクトを管理していたのですがGitがおかしくなってしまいました。 おかしくなった原因は明確で、 今まで「ファイル名の大文字小文字を区別しない」というGitの設定でコミットなどをしていたのに 途中から「ファイル名の大文字小文字を区別する」という設定に変えたからです。 ↓のコマンドにて ``` git config core.ignorecase false ``` **【この設定に変えたかった理由は】** パッケージ名の大文字小文字を変更 Javaプロジェクトなので自動的にディレクトリ名も大文字小文字が変わる ソースないの package 部分も自動リファクタリングにより大文字小文字が変わる ↓ コミット ↓ パッケージ名を変える前の過去のコミットに戻す ↓ ソース内の package 部分は大文字小文字変更前に戻る ディレクトリは大文字小文字が変更前に変わらず、変更後の状態のまま となるからです。 途中から大文字小文字を区別するようにするにはどうすればよろしいでしょうか? ちなみに、SourceTreeを使用しており、リモートリポジトリもあります。 --- 以下追記 ---- 【要点まとめ】 ・masterブランチとBブランチがあるとする ・どちらも「ファイル名の大文字小文字は区別しない」として今までコミットされてきた ・先行するmasterブランチで作業中に「ファイル名の大文字小文字も区別されないと困る」事が発覚 【現状】(ファイル名もディレクトリ名も同じ) ・masterブランチでとあるファイルのファイル名の大文字小文字を変更 (例 aaa/bbb.png → AAA/bbb.png) ・Bブランチに切り替えてみると 過去の状態(aaa/bbb.png)であるはずのBブランチに切り替えても ファイル名が「AAA/bbb.png」になってしまう 【理想】 Bブランチに切り替えた時、Bブランチは「aaa/bbb.png」の状態だったので「aaa/bbb.png」にファイル名が戻って欲しい。
回答: `core.ignoreCase`の説明は > > Internal variable which enables various workarounds to enable Git to work better on filesystems that are not case sensitive, like APFS, HFS+, FAT, NTFS, etc. > > > となっていて、あくまで大文字小文字を区別しないファイルシステムでうまく処理するための内部変数です。リポジトリに登録する際に区別する/しないを切り替える変数ではありません。 > > Modifying this value may result in unexpected behavior. > > > 不用意に変更すると意図しない結果となることも説明されています。ファイルシステムに合った適切な値に直し、checkoutし直すことをお勧めします。