【エディタ ≠ SourceTree ≠ ターミナル】同一ファイルなのに名前が食い違っているときの対処法

同一ファイルであるはずなのに

 

テキストエディタ側で表示されているファイル名 (↑これを正しい名前としたい)

   ≠

Sourcetree側で表示されるファイル名

   ≠

ターミナル側(lsコマンド)で表示されるファイル名

 

という感じで、

 

テキストエディタでは正しく表示されているファイル名が、 なぜかSourcetreeやgit,ターミナルでは違った名前になっていた。

 

それゆえコミットやプッシュがうまくいかなくなったときのエラー対処法。

 

エラー内容(もとい症例)

テキストエディタ側:top.html.erb(正しい表示)

 

画像の通り。

一見ローカルで編集している分には問題なし。

スペルミスなどもないし、ブラウザ表示やリンクも特に問題ありません。

 

 

Sourcetree側:”btop”と表示され追跡されていない

 

このファイルが

Sourcetreeではなぜか btop.html.erb」と表示されている。

 

名前の食い違いから生じた不具合としては、

 

  • btopとあるが、そのような名前のファイルは存在しないので、このファイルだけはうまくコミットできない(当然)
  • 右側の「・・・」ボタンからbtopファイルだけ「無視」「破棄」など選ぼうとしても、反応なしで残ったまま
  •  テキストエディタでtop.html.erbを編集しても、このbtopには反映されない

  • しかもsourcetreeではtop.html.erbを認識してくれない

(故にgithubでもtopファイルは存在していない)

という状態です。

「ファイル名が食い違っている」とかで色々調べて、なんとなくコンフリクト発生しているのかな。。

と考えてはいましたが、

Sourcetreeでの「!」マーク 「コンフリクトしてるよ!」

という意味だったようです。

 

SourceTreeでコンフリクトを解決する 左側のメニューから「作業コピー」を選択してみますと、
作業ツリーにはsample.txtに「!」マークがついています。

これが衝突していますよ、というお知らせになっています。

引用元: コンフリクトって!?Gitバージョン管理でマージしたときに発生した衝突を解決する

$ git statusとターミナルでの表示を確認

原因はコンフリクトの発生か??ということで対処について調べました。

 

状況確認のためgit statusコマンドを実行してみます。

 

以下、git statusの結果の見方を引用。

git status

  • コンフリクトしているファイルを確認。
  • 「Unmerged paths:」にあるファイル一覧がコンフリクトしている修正の必要なファイル。

引用元: コンフリクト発生!焦らず利用する4つのコマンド #git

 

 

結果はこちら。 git statusしたら件のファイルは消えているらしいとのこと。

ファイル名は「\btop」とされてますが。。。

 

上の画像のように、

ターミナルの lsコマンドでこのファイルを調べると

?top.html.erb」になっている。

 

 

みんな言ってること違うじゃないですかw(゚Д゚≡゚Д゚)

対処法:

1.マージしてコンフリクト解消~コミットまでは成功

 

そういえばマージはしてないよな。。と思いマージしてみる。

 

 

プルリクを覚えたばかりだったので、 GitHub側でMerge Pull requestボタンを押してみたところ、

画像のようにコンフリクトが解消できたようです。

このときはコンフリクト発生表示は出ませんでした。 (まぁここは普通にターミナルでマージすればいいと思います)  

 

 

 

 ↓ で、この状態で再度コミットしてみたら、今度はコミットできました!(゚∀゚)

 

これで追跡されるようになった!

 

 

だけど、sourcetreeで見ると btop.html.erbとしてファイルが追加されています。

(*´з`)う~ん、あと一歩だな。

 

 

2.リモートブランチにプッシュ~>ターミナルでファイル名変更する

 ファイル名変更: $ git mv -f

 コミットできたので一度今のブランチにプッシュします。

 

次にファイル名変更の操作をすることにしました。

 

記事見る、ほうほう…git mvで -f をつければいいのか。。

gitコマンドでファイル名をリネームするとうまくいきます。

$ git mv -f MAinActivity.java MainActivity.java

-fオプションをつけないと同じファイル名が存在するよ!と怒られてしまうので、
-fで強制的に変更してください。

引用元: gitでファイル名変更時に小文字大文字の差分が認識されないとき

 変更元のファイル名はls表示にする~>成功!!

 

git mv -fをすればいいのは分かったけど、

ここで変更したいファイルの名前は”btop”か”?top”、どちらにするべきか。

 

まずコミットが成功したsourcetreeに表示されてた通り、btopとしてみたところ

 

 

うまくいきませんでした。 次に(lsコマンドで出てくる表示に合わせて) “?top”でgit mv -f コマンドを実行してみると、、、

 

おっ!成功したようです^^

sourcetree側でもtopとして無事認識されました!

 

これでやっとテキストエディタ・sourcetree・gitすべてでファイル名が統一されました^^;

 

 

再びコミット・プッシュをして一件落着。

 

反省:原因の心当たり

masterにチェックアウトしてた状態で、ファイル編集。

この変更をmasterに反映させたくないと思い、違うブランチに切り替えてコミットしたような…多分これだなw