質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Git

Gitはオープンソースの分散バージョン管理システム(DVCS)です。

Q&A

解決済

2回答

5786閲覧

git ディレクトリ名を小文字->大文字に変換したら別ブランチにcheckoutできない

u.shino

総合スコア12

Git

Gitはオープンソースの分散バージョン管理システム(DVCS)です。

0グッド

1クリップ

投稿2021/11/26 07:06

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のファイルは存在しない状態です。
何か解決策はありますでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

winterboum

2021/11/27 14:27

...... のところにはなんとありますか?
u.shino

2021/11/29 01:46

変更点のあるファイル名のリストが表示されます。
CHERRY

2021/11/30 00:19

未commit のファイルは存在しないということですが、 git status の結果はどうなりますか。
u.shino

2021/11/30 01:31

nothing to commit, working tree clean です。
CHERRY

2021/11/30 01:41 編集

ファイルシステムも絡んでいるような気がしますので、確認ですが、お使いの OS は何でしょうか?
u.shino

2021/11/30 01:42

macOS Big Surです。
CHERRY

2021/11/30 02:20

> macOS Big Surです。 macOS の APFS ファイルシステムは、デフォルトでは、大文字・小文字を区別しないと思います。 区別するように初期化してからインストールされているのでしょうか? [Macのディスクユーティリティで利用できるファイル・システム・フォーマット]( https://support.apple.com/ja-jp/guide/disk-utility/dsku19ed921c/mac ) にあるようにディスクのフォーマットによって大文字・小文字を区別するかが決まります。 > APFS: APFSフォーマットを使用します。暗号化や、大文字/小文字を区別するフォーマットが必要ない場合は、このオプションを選択します。 と > APFS(大文字/小文字を区別、暗号化): APFSフォーマットを使用し、ファイル名およびフォルダ名の大文字/小文字を区別し、ボリュームを暗号化します。たとえば、「Homework」と「HOMEWORK」という名前のフォルダは、2つの異なるフォルダです。 のどちらのファイルシステムをお使いですか?
u.shino

2021/11/30 02:29

APFS(暗号化)となっているようなので、後者であるように思います。 ただ、今以下の検証をしてみたんですが、ファイルシステム上ではケースの区別はされていないのかもしれません。 ``` $ mkdir test $ mkdir Test mkdir: Test: File exists ```
winterboum

2021/11/30 21:16

実は質問の「git管理下のとあるディレクトリを小文字→大文字に変換しました。そのままだとgitに変更を検知されないため」に違和感がありました。 私の環境(Linux)ではそういうことがありません。 ということは、Macのgitは file system に合わせて、defaultでは git config core.ignorecase True に設定されているのでしょう。 ですので、おそらく git には罪はなく file system の特性に原因がある。
winterboum

2021/11/30 23:26 編集

ですので、お使いの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との関係をどうするのか、で手順がかわるかな、
guest

回答2

0

自己解決

  • 現在作業中のブランチ(仮にdev)をリモートリポジトリにpushする
$ git push origin dev
  • 新しくリモートリポジトリをcloneする
$ cd .. $ ls hoge $ mv hoge hoge.bak $ git clone git@github.com:*****/hoge.git $ cd hoge
  • cloneしたリポジトリ上でdevのブランチを作成
$ git branch dev origin/dev
  • 3で作成したdevブランチとmaster(やその他ブランチ)間での移動は問題なくできた(その他mergeなども問題なし)
$ git checkout dev $ git checkout master $ git merge dev

※ただし、checkoutした際にブランチ間で大文字小文字の反映がされていない場合あり。その場合はmv test Testなどをすれば解消可能(それでgitに差分が検知することはない)

投稿2021/12/01 01:46

u.shino

総合スコア12

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

その リストされたファイル が原因です
checkout しようとしているbranchはそのfileをcommitされていて、checkoutすると上書きしてしまうので、その警告がでています。

削除するか、コミットするかしてください。

やったことが
$ ls
test
$ git mv test test_
$ git mv test_ Test
$ git add .
とありl
git commit が書かれていないのも気になります。
やっていないならそれも必要です。

投稿2021/11/29 21:24

winterboum

総合スコア23567

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

u.shino

2021/11/29 23:43

説明に記載していますが、未commitのファイルは存在しません。
winterboum

2021/11/30 01:05

...... にリストされたfileは存在しないのですか?
u.shino

2021/11/30 01:35 編集

ファイル自体は存在します。 commitされていないファイルはありません。
winterboum

2021/11/30 01:41

git status の結果を貼ってください。下手な編集すると問題がわからなくなるかもです。
winterboum

2021/11/30 01:43

ああ、 ですからその 「ファイル自体は存在します。」がコミットされていないのです。 コミットされていれば untracked working tree files には出てきません。
u.shino

2021/11/30 02:04 編集

上のコメントにも記載してますが、git statusの結果はnothing to commit, working tree cleanです。 全てのファイルはcommitされています。 それなのにuntracked working tree filesが出ているので困っているんです。 具体的なファイル名などは情報資産管理の都合上記載することはできないため省略させていただいています。
winterboum

2021/11/30 02:21

untracked working tree files があるからです。 「別のブランチ」でcommit したかもしれませんが、 いまの branchではcommitしていないのです
u.shino

2021/11/30 02:34

「別のブランチ」が何を指しているかわかりませんが、編集作業を行ったブランチで全ての変更点をcommitし、そこからmasterにcheckoutしようとして発生しているため、「今いるのブランチ」でcommitをしています。 そこからどのブランチにもcheckoutできない状態です。 git statusではnothing to commit, working tree cleanなので、untracked working tree filesと言われてもこれ以上commitするファイルもありません。
winterboum

2021/11/30 02:38

「別のブランチにcheckoutしようとしたところ」 の 別「のブランチ」 です 「nothing to commit, working tree cleanなの」は 「GIT管理下にあるfileは」です。 その他に GIT管理下にないfileが存在しているということです。
u.shino

2021/11/30 02:55 編集

その他にGIT管理下にないファイルというのがよくわからないのですが、git管理下にないファイル(git statusで出てこないファイル)はcheckoutしようとしても無関係なのでは?
winterboum

2021/11/30 03:41

git statusで出てるのでは? 出ていないことを確認させてもらえてないので、エラーメッセージからステイするしかないので
winterboum

2021/11/30 03:43

追跡されていないファイル: とか untracked files とか
u.shino

2021/11/30 04:17

nothing to commit, working tree cleanと記載しているんですが・・・ 差分は一切ないです。
winterboum

2021/11/30 06:19

ですからそれは、GIT にcommitしたfileについてのはなしです。 git status したときに 追跡されていないファイル: とか untracked files とかの存在を確認しないと問題点が分かりません
u.shino

2021/11/30 07:25

> GIT にcommitしたfileについてのはなし 違いますよ。git statusしたとき表示されるメッセージの話です。
winterboum

2021/11/30 08:21

つまり、 git status したときに 追跡されていないファイル: とか untracked files はなかったということですか?
u.shino

2021/11/30 08:30

ないです。
winterboum

2021/11/30 09:35

ふむ、、、、 すると error: The following untracked working tree files would be overwritten by は謎ですね。 そのlistされたfileは 「大文字に変更」の影響を受けるfileですか?
u.shino

2021/11/30 09:43

その通りです。 通常gitではケースの変更は検知しないので検知するようわざわざ設定を変更し、さらに同名でのケースの変更のみだとうまく変更点をcommitできないため、一度アンダースコアをつけるディレクトリ名に変換してから本来命名したかった大文字に変換しています。 推測でしかありませんが、挙動自体はgitの不具合のような気がしています。 何か解消法があればいいのですが。
winterboum

2021/11/30 09:48

error: The following untracked working tree files のlistは 小文字 で出てますか? 大文字ではなく。
u.shino

2021/11/30 13:53

小文字で出ています。
winterboum

2021/11/30 21:12

そうしますと、これはCHERRYさんが懸念されているMacのファイルシステムの問題のように思えます。 1. git は 今までtest で有ったものを Test として扱うようになった。 2. しかし mster では その反映がされていないから test のままである。 3. master をcheckout するにあたって fileシステムからは test として上がってくる。 4. このため 現branchではGIT管理下にない test が存在し、masterでは管理下にあるので、そのエラーとなった。
winterboum

2021/11/30 21:23

この続き、間違えて 質問へのコメント 欄に書いてしまいました
u.shino

2021/12/01 01:36

ケース変換がgitに検知されないのはこちらの通りです。 https://qiita.com/shoheiyokoyama/items/0fd9f688a269bbdc9da3 上記記事では触れていませんが、filesystemによって挙動に違いがある可能性はあるかもしれません。 アドバイスいただいた方法だといくつもcommitを遡らなければいけないため、ちょっと大変そうです。 根本的な解決方法ではなく別の解決手段ですが、色々やってみて自己解決できたため記載します。 諸々ありがとうございました。
winterboum

2021/12/01 04:05

解決できてよかったです。 ただ、、、 case区別するOSを含めた共同開発のときって、Macの人ってどうしているんだろう。。。 が疑問、懸念
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問