課題
Githubで同名のファイルが2つある
日本語の名前を持つファイルをGithubにアップし、別々のマシンから編集してpush
すると以下のような状態になってしまいました。
(ちなみに内容は勉強会のメモ)
原因
Google先生に聞いてみたところ、同様のことを訴えていた方がいらっしゃいました。案の定、文字コードの問題のようです。
やっぱり Git 上で日本語ファイル名は使うべきじゃないという話 - WonderPlanet DEVELOPER BLOG
しかし、上記の事例とは異なり、ブラウザからのファイル削除で対応できませんでした。Githubではブラウザからディレクトリを削除する方法が提供されていないからです。
解決策
- リモートをローカルに強制的に一致させる
- Gitの管理対象ファイルをすべて削除する
- ローカルのファイルを再度コミットしてpush
本来なら分裂したディレクトリだけを管理対象から消せば良いのですが、同様の分裂が別の箇所で起こっている可能性を考慮して全削除にしました。
「何も考えなくて良いからゴリ押し」というのは案外馬鹿にできないのです。
実行したコマンド
ローカルで以下を実行します。
カレントディレクトリはリポジトリ内の最上位のものとします。
$ git rm --cached -r . # ローカルにファイルを残したまま、gitの管理対象ファイルを全削除
$ git commit -m "remove all" # 一旦すべて削除した状態をコミット
$ git push -f # リモートもすべて削除された状態に
$ git add . # 再度ローカルの全ファイルを管理対象に追加
$ git commit -m "reset" # 全ファイルを管理対象にした状態をコミット
$ git push -f # プッシュしてリモートに再度ファイルを作成
注意
かなりの力技なので、複数人で管理しているリポジトリでは絶対に行わないようにしましょう。