あるプロジェクトだけ別の接続が必要でも、Gitのグローバルプロキシを設定する必要はありません。既存のチェックアウトには独自のローカル設定があるため、変更をそのリポジトリに限定できます。

以下の例では現在のgit config set/get/unsetコマンドを使います。プロジェクトディレクトリ、リモートURL、文書用IPは置き換え用です。公開プロキシの利用が許される公開リポジトリのテストでは、HTTPプロキシ一覧から候補を選びます。

git -C project config set --local http.proxy http://203.0.113.10:8080
git -C project ls-remote origin

プロキシURLにはトランスポートのスキームを含めます。HTTPSリモートでも、CONNECT対応の通常のHTTPプロキシを使えます。リモートがHTTPSだからといって、プロキシURLをHTTPSに変更する必要はありません。

Gitが実際に選んだ設定を確認する

想定外の結果になったら、実際のリモートURLに対して選ばれる値を調べます。

git -C project config get --show-origin \
  --url=https://example.com/team/project.git http.proxy

この照会には実際のHTTPSリモートを使ってください。Gitにはシステム、ユーザー、リポジトリ、コマンドライン、URL別の設定があります。グローバルのhttp.proxy値だけを見ると、より具体的なルールを見落とす場合があります。設定元の出力から、結果を決めたファイルやコマンドラインの指定を特定できます。

ローカル設定は、そのリポジトリからのHTTPアクセスに適用され、特定のブランチだけに適用されるものではありません。HTTPリモートが複数あれば、最初にテストしたもの以外にも使われる場合があります。対象をさらに絞りたいときはURL別のHTTP設定を使えます。

チェックアウトが存在する前

最初のクローンでは、上書きを永続化するか決めます。そのGit呼び出しだけに限定するなら次を使います。

git -c http.proxy=http://203.0.113.10:8080 \
  clone https://example.com/team/project.git

コマンドラインの上書きは、新しいチェックアウトの永続設定に自動で書き込まれません。後のfetchでも同じ経路を使うなら、その後でローカル値を設定してください。

SSHリモートは別のケース

git@host:やssh://で始まるリモートはSSHを使います。GitのHTTPプロキシ設定を入れても、HTTP転送に変わるわけではありません。SSH操作がまだ失敗するという理由だけで正常なプロキシIPを替える前に、リモートのトランスポートを確認してください。

ローカルの上書きが不要になったら、そのキーだけを削除します。

git -C project config unset --local http.proxy

削除すると、ほかの設定元にある適用可能な設定が再び有効になります。マシン上のプロキシ設定をすべて消すコマンドではありません。

関連記事