I’m hungry

おもにAmazonでの衝動買いや技術的な話をぼちぼちと。

存在しないファイルでerror: The following untracked working tree files would be overwritten~

2014-12-12 14:50:48 | ネットサービス/テクノロジ
gitでハマったのでメモ。
ブランチを切り替えつつ新規作成しようとして

git stash ; git checkout -b myrepo origin/branch/myrepo

を実行したらエラーが出て、

error: The following untracked working tree files would be overwritten by checkout:
hoge/fuga/not-exists-file
Please move or remove them before you can switch branches.
Aborting

とか言ってる。hoge/fugaディレクトリは存在するんだけど、その下にnot-exists-fileなんていうファイルがないのになぜかこのエラー。
色々調べてみたんだけどそもそも存在しないファイルがチェックアウトで上書きされるとか意味不明。

で、最終的にはhoge/fuga配下にあるファイルを全部消して再度実行したら通った。

手動で他のファイル消しちゃったので

cd hoge/fuga ; git checkout HEAD -- .

とかやってもとに戻す必要がある。

挙動としてかなり意味不明だが、メモとして残しておく。


2015年2月12日追記:
原因がなんとなくわかった。windowsのコマンドプロンプトやcygwin上からだと実行ファイルは拡張子ありでもなしでも同一ファイルとして認識してしまうことによる問題みたい。

たとえばcygwin上で以下のようなコマンドを実行すると、ファイルが存在しているとして失敗してしまう。

$ cp HOGE.exe HOGE
cp: 通常ファイル `HOGE' を作成できません:File exists
$


リポジトリ上でwindows用の実行バイナリとしてHOGE.exe, *nix用の実行バイナリとしてHOGEを同じディレクトリに存在させた状態にしてたりすると発生する可能性がある。
今回のケースは、もともとのHOGE.exeだけ存在しているリポジトリにいる状態で、HOGE.exeとHOGEが両方存在するリポジトリに切り替えようとしたところ今回の事象が発生した。
#HOGEをチェックアウトしようとすると、HOGE.exeが存在していて衝突


今回はひとまずHOGE.exeをrmして、git stashせずにgit checkoutで切り替えて(切り替えたときHOGE.exeにD(削除マーク)がつく)、その後git checkout HEAD -- HOGE.exeとしたら無事両立することができました。
どうやら

$ cp HOGE.exe HOGE
cp: 通常ファイル `HOGE' を作成できません:File exists
$

は失敗するけど、HOGE(実行バイナリ)が存在する状態でHOGE.exeを同じディレクトリに存在させようとする操作はOKみたいです。

$ cp HOGE HOGE.exe
$
















Comment    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 秩父・四萬部寺の紅葉(もみ... | TOP | Yosemiteでlaunchd.confが使... »
最新の画像もっと見る

post a comment

ブログ作成者から承認されるまでコメントは反映されません。

Recent Entries | ネットサービス/テクノロジ