git管理下のとあるディレクトリを小文字→大文字に変換しました。
そのままだとgitに変更を検知されないため、 git config core.ignorecase false
を設定し、以下の作業を行うことで変更自体はcommitできました。
$ ls test $ git mv test test_ $ git mv test_ Test $ git add .
その後、作業をcommitしたブランチから別のブランチにcheckoutしようとしたところ、以下のエラーが出てcheckoutすることができません。
$ git checkout master error: The following untracked working tree files would be overwritten by checkout: ...... Aborting
未commitのファイルは存在しない状態です。
何か解決策はありますでしょうか?
...... のところにはなんとありますか?
変更点のあるファイル名のリストが表示されます。
未commit のファイルは存在しないということですが、 git status の結果はどうなりますか。
nothing to commit, working tree clean
です。
ファイルシステムも絡んでいるような気がしますので、確認ですが、お使いの OS は何でしょうか?
macOS Big Surです。
> macOS Big Surです。
macOS の APFS ファイルシステムは、デフォルトでは、大文字・小文字を区別しないと思います。
区別するように初期化してからインストールされているのでしょうか?
[Macのディスクユーティリティで利用できるファイル・システム・フォーマット]( https://support.apple.com/ja-jp/guide/disk-utility/dsku19ed921c/mac ) にあるようにディスクのフォーマットによって大文字・小文字を区別するかが決まります。
> APFS: APFSフォーマットを使用します。暗号化や、大文字/小文字を区別するフォーマットが必要ない場合は、このオプションを選択します。
と
> APFS(大文字/小文字を区別、暗号化): APFSフォーマットを使用し、ファイル名およびフォルダ名の大文字/小文字を区別し、ボリュームを暗号化します。たとえば、「Homework」と「HOMEWORK」という名前のフォルダは、2つの異なるフォルダです。
のどちらのファイルシステムをお使いですか?
APFS(暗号化)となっているようなので、後者であるように思います。
ただ、今以下の検証をしてみたんですが、ファイルシステム上ではケースの区別はされていないのかもしれません。
```
$ mkdir test
$ mkdir Test
mkdir: Test: File exists
```
実は質問の「git管理下のとあるディレクトリを小文字→大文字に変換しました。そのままだとgitに変更を検知されないため」に違和感がありました。
私の環境(Linux)ではそういうことがありません。
ということは、Macのgitは file system に合わせて、defaultでは git config core.ignorecase True に設定されているのでしょう。
ですので、おそらく git には罪はなく file system の特性に原因がある。
ですので、お使いのfilesystem では 大文字の使用は危険
今回の事態の緊急避難としては次でやれるかな
現branch を dev とします。
dev で git mv Test _test してcommitする
master にcheckoutする
dev をmergeする?
mergeしたなら
master で git mv _test Test し commitする
dev を checkout して master をmerge する
しないなら devとの関係をどうするのか、で手順がかわるかな、
回答2件
あなたの回答
tips
プレビュー