55412


Gitでプロジェクトを管理していたのですがGitがおかしくなってしまいました。  
おかしくなった原因は明確で、  
今まで「ファイル名の大文字小文字を区別しない」というGitの設定でコミットなどをしていたのに  
途中から「ファイル名の大文字小文字を区別する」という設定に変えたからです。  
↓のコマンドにて

[code]

    git config core.ignorecase false
    
[/code]

**【この設定に変えたかった理由は】**  
パッケージ名の大文字小文字を変更  
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」にファイル名が戻って欲しい。


CC BY-SA 4.0
2019-05-30T02:19:28.437
55360
2019-05-31T15:24:19.343
2019-05-30T09:12:21.007
10346
10346
question
java git
Gitでファイルの大文字小文字を区別するかを後から切り替える


[`core.ignoreCase`](https://git-scm.com/docs/git-config#Documentation/git-
config.txt-coreignoreCase)の説明は

> 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し直すことをお勧めします。


CC BY-SA 4.0
2019-05-30T10:23:09.610
55372
2019-05-30T10:23:09.610
4236
55360
answer


> 【現状】（ファイル名もディレクトリ名も同じ）  
>  ・masterブランチでとあるファイルのファイル名の大文字小文字を変更  
>  （例 aaa/bbb.png → AAA/bbb.png）  
>  ・Bブランチに切り替えてみると  
>  過去の状態（aaa/bbb.png）であるはずのBブランチに切り替えても  
>  ファイル名が「AAA/bbb.png」になってしまう

昔はWindowsでも同じような挙動だった気がするのですが、今試してみるとちゃんと大文字/小文字が切り替わりますね…(Git for Windows
2.18.0)  
ともあれ、そのような場合には、一旦ファイルシステム上のファイル(ディレクトリ)を削除してチェックアウトし直せば、リポジトリにコミットした状態で復元されるはずです。

[code]

    git checkout branch-B
    git rm -r AAA
    git checkout .
    
[/code]

* * *

> パッケージ名の大文字小文字を変更

これをやりたい場合、面倒ですが

  1. 一旦全然別の名前へrename & commit
  2. 最終的に変更したい名前にrename & commit
  3. `rebase -i` で fixup してこの2つのコミットをまとめる

の段階を踏む必要があるかと思います。 `aaa` -> `AAA` に変えたいのであれば、

[code]

    git mv aaa tmp
    git commit
    git mv tmp AAA
    git commit
    git rebase -i @^^
    
[/code]

のような感じになるかと。


CC BY-SA 4.0
2019-05-31T15:24:19.343
55412
2019-05-31T15:24:19.343
2808
55360
answer