tanacasinoのメモ

what are you waiting for ?

git で http proxy を remoteごとに分ける

外部のgitサーバと内部の開発用gitサーバが混在する環境を使用している場合でかつ外部接続にプロキシが必要な場合、$HOME/.gitconfigに proxyを書いてしまうと内部NW側のサーバを使うときにいちいち設定変えたり、ローカルレポジトリの「.git/config」を切り替えたりせねばならず面倒。

# これを$HOME/.gitconfigに書くか、レポジトリごとの .git/configに書くか
[http]
        proxy = http://proxy.example.com:8080

レポジトリごとに、外部・内部が分かれている場合はよいが、1つのレポジトリのリモートレポジトリが、外部と内部が混在する場合、git fetch --all でまとめて取ってこれず不便。

# こんな風にoriginは、内部NW、upstream は 外部NWのgitレポジトリだったりする(まれなのかな)
$ git remote -v
origin  https://内部NWのサーバ.git (fetch)
origin  https://内部NWのサーバ.git (push)
upstream        https://外部NWのサーバ.git (fetch)
upstream        https://外部NWのサーバ.git (push)

かといって、コマンドたたく度に http_proxy= git fetch origin みたいなことするのの嫌だなと。 gitでnoproxyが使えれば解決なんだけど、ソースを読む限り、どうやら現在のgitは実装してないぽいので、回避策は remote セクションでproxyを指定すること。という結論に行きついた。

[remote "origin"]
        url = https://内部NWのサーバ.git
        fetch = +refs/heads/*:refs/remotes/origin/*
        # $HOME/.gitconfigでproxyを指定しておいて基本はproxyで。切り替える場合は、以下のように空をセットして リモートレポジトリの originのみproxyを使わないようにする
        # 逆に外部NWに行く方がレアケースの場合は、$HOME/.gitconfigでは、proxyは設定せずにここのみに設定する
        proxy =

でもやっぱ面倒だという場合のためにパッチ作ってみたけど本流に投稿する勇気はない。(きっとみんないらないんでしょうね。)

https://gist.github.com/tanacasino/6315788