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
$
ブランチを切り替えつつ新規作成しようとして
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
$