git、repo、svnでcurlエラーに対処するproxy設定



イントラネット内からgitを使った外部アクセスは難しく、特にgitプロトコル(git://)やsvnプロトコル(svn+ssh:~)でのアクセスはHTTP Proxy経由でのアクセスにはproxy越え等が必要になります。

具体的には、git、repo を利用して次のようなエラーが発生することがあります。

repo sync
....
curl: (22) The requested URL returned error: 404 Not Found
Server does not provide clone.bundle; ignoring.

ここでは、HTTP Proxyサーバを通してトンネリングして解決する方法を紹介します

これにより、proxyでgithub、svn、gitサーバにアクセスできるようになります。

スポンサードリンク

設定方法

HTTP Proxyサーバを通してトンネリングできる「Corkscrew」か「nc」を利用します。

Ubuntuの場合を前提に説明しています。

corkscrewを利用する場合

まずは、corkscrewを取得します。

$ sudo apt-get install corkscrew

次に設定ファイルを作ります。

「Proxy host名」「Proxy port名」の部分は保有しているproxy設定情報を記入してください。

$ sudo cat > proxy-cmd.sh

#!/bin/bash
CORKSCREW=`which corkscrew`
$CORKSCREW <Proxy host名> <Proxy port名> $1 $2

そして、実行権限をつけてフォルダ移動しておきましょう。

$ sudo mv proxy-cmd.sh /usr/local/bin/proxy-cmd.sh
$ sudo chmod 777 /usr/local/bin/proxy-cmd.sh

使い方は次のようになります。

$ GIT_PROXY_COMMAND=/usr/local/bin/proxy-cmd.sh git clone git://github.com/rails/rails.git

また、 git config に proxy 情報を記載すれば、「GIT_PROXY_COMMAND」を打つことなしに使えます。

$ git config --global core.gitproxy "proxy-cmd.sh"
$ git clone git://github.com/rails/rails.git

ちなみに、「.gitconfig」には次のように記載されています。

$ cat ~/.gitconfig
[core]
        gitproxy = proxy-cmd.sh

もしくは次のコマンドでconfig情報を確認できます。

$ git config --list

nc を利用する場合

UbuntuやMacは最初からncが入っているので、設定だけ行います。

「Proxy host名」「Proxy port名」の部分は保有しているproxy設定情報を記入してください。

$ sudo cat > proxy-cmd.sh

#!/bin/bash
nc -X connect -x <Proxy host名> <Proxy port名> $1 $2

あとは、corkscrewを利用する場合と同じです。

便利なコマンド

複数のアカウントに対応する方法

ローカルリポジトリ毎に設定できます。

$ cd [ローカルディレクトリ]
$ git config user.name "個人のユーザ名"
$ git config user.email "個人のメールアドレス"

エラー一覧

git cloneを行うまでに発生するエラーを列挙しておきます。

名前設定されてない

サーバによっては認証が必要な場合があります。

error.GitError: manifests var:
*** Please tell me who you are.

Run

  git config --global user.email "個人のメールアドレス"
  git config --global user.name "個人のユーザ名"

to set your account's default identity.

Gitに自分が何者なのか教えてあげる必要があります。

解決法は、説明どおり登録済のメールアドレスを次のように入力します。

$ git config --global user.email "you@example.com"
$ git config --global user.name "Your Name"

スポンサードリンク