2015年3月27日金曜日

[cygwin] cygwin版のgitコマンドでサーバーとの通信に失敗する問題の対処

cygwin上でgitコマンドを使用しているのですが、ある環境でのみgit pull/pushで以下のようなエラーが発生する問題に遭遇しました。調子よく動作している別の環境との比較で原因が判明したので、同じ問題にハマってしまった人向けに情報を残しておきます。

問題の現象:

問題の環境ではgit pull/pushを実行すると、以下のようなエラーが出力されていました。
% git pull origin master
fatal: 'pull' appears to be a git command, but we were not
able to execute it. Maybe git-pull is broken?

% git push origin master
fatal: Full write to remote helper failed: Broken pipe

解決方法:

この問題はPATH環境変数の設定によって発生します。cygwinのバイナリが格納されているディレクトリ(C:\cygwin64\bin)がユーザー環境変数にしか定義されていない状態だと、このエラーになります。以下のいずれかの設定に変更することで問題を解決できます。

  1. cygwinのシェルスクリプトでpath環境変数の先頭に/usr/binを追加する
    • cygwinをインストールしたデフォルト環境ではこの状態になっています。自分はcabalコマンドがcygwin上で実行できるよう、このデフォルト設定を無効にしていました。
  2. ユーザー環境変数ではなく、システム環境変数のPATHにcygwinディレクトリを追加する
    • 推測ですが、システムプロセスとして/usr/bin以下のコマンドを実行しているのだと思われます。パスの順序は変わらないのに、ユーザー環境変数のPATHにcygwinディレクトリを記述していると、問題の現象が発生しています。

備考:

0 件のコメント:

コメントを投稿