高尾宏治日記 on はてなブログ

プログラミング言語Rubyを中心とした技術情報を扱うブログです(Microsoft Surfaceはやめました)。

WindowsのGitで異常終了するようになったら...一時ファイルの削除と再起動でOK!

はじめに

今日、一日ぶりにWindowsEmacsからmagitを使ってmagit-refresh(magit-statusの画面でgを押す)すると「sh.exeが異常終了しました」というダイアログがでてmagit-refreshが失敗するようになりましたorz

なにか変ったことといえば、昨日、スリープからの復帰に失敗してブルーバックになりました。あぁ、スリープに失敗しまくっているので、いつかはこうなるよな~と思いつつ、対処方法を探します。(一瞬、Windowsのリフレッシュが頭をよぎりましたが、アプリケーションのセットアップなどに数日かかるため恐ろしくてできません...)

作業ログ

インターネットで「sh.exe.stackdump」のキーワードを検索して、次のブログの記事を見つけました。

http://d.hatena.ne.jp/miau/20131229/1388301913 より

git のコマンドを叩くと

 0 [main] sh.exe" 6768 handle_exceptions: Exception: STATUS_ACCESS_VIOLATION
 1620 [main] sh.exe" 6768 open_stackdumpfile: Dumping stack trace to sh.exe.stackdump

こんなエラーが出る状態になってしまったので、対策方法のメモ。ちなみに試したバージョンは Git-1.8.4-preview20130916.exe です。

まさにこれですね。

上記の記事で紹介されている「Process monitor」は http://technet.microsoft.com/ja-jp/sysinternals/bb896645.aspx からダウンロードできます。

Process monitorの操作説明を読んで、「Process Nameにsh.exeを含む」でフィルタリングすると、たしかに %TEMP% へのアクセス時に異常終了しているようですね。

じゃあ、あとは一時ファイルを削除すればよさそうです。Windows 7までは「ディスク クリーンアップ」でできたようなのですが、Windows 8では違うようです。

http://121ware.com/qasearch/1007/app/servlet/relatedqa?QID=013968 より

Windows 8.1の場合

「検索」ボックスに「不要」と入力し、表示された一覧から「不要なファイルの削除によるディスク領域の解放」をクリックして、手順5に進みます。

ふむふむ。

「不要なファイルの削除によるディスク領域の解放」で、一時ファイルのみをチェックして「OK」ボタンを押すと一時ファイルが削除されます。

あら、それでもまだmagit-refreshが失敗します。で、PC自体を再起動するとmagit-refreshが成功するようになりましたとさ。

まとめ

magit-refreshに失敗するようになったら、「不要なファイルの削除によるディスク領域の解放」で一時ファイルを削除してから再起動すればOK!

「Process Monitor」を知ることができたのはよかったね。