プロキシ.不便ですよね. githubはhttpsで通信できるので,プロキシも超えられるのですが,プロキシ外からアクセスするとき,毎回,gitconfigのプロキシ設定を書き換える必要が有るわけです. セキュリティの問題上,ネットワークを切り替えて作業することはあまりないのですが,それだけに,なぜ「gitが動かない!!!!」とハマことがあります. そこで,環境に応じて,gitconfigのプロキシを自動的に切り替えるスクリプトを作ってみますた.

  1. 引数にサーバのアドレスとポートを渡します.
  2. すると,サーバにpingを打って,導通確認をします.
  3. 導通確認が取れると,そのサーバをgitコマンドを使ってプロキシに設定し,取れない場合は,プロキシサーバの設定を空にするというものです.

ソースはこんな感じ.pingのタイムアウトとかは,状況に合わせて変えた方がいいでしょうね.

#!/bin/bash
/sbin/ping -c 1 -W 500 $1 >> /dev/null

if test $? -eq 0; then
   echo "Set global http.proxy=http://$1:$2"
   git config --global http.proxy "http://$1:$2"
else
    echo 'Unset global http.proxy'
   git config --global http.proxy ''
fi    

そして,このスクリプトをlaunchdで定期実行するようにします.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key>
  <string>com.sonson.gitconfig.proxy.plist</string>
 
  <key>ProgramArguments</key>
  <array>
    <string>/path/to/auto.gitconfig.proxy/update.sh</string>
    <string>your proxy</string>
    <string>your port</string>
  </array>
  
  <key>RunAtLoad</key>
  <true/>
 
  <key>StartInterval</key>
  <integer>30</integer>
</dict>
</plist>

ProgramArgumentsのところの値を自分のプロキシ環境に変えればいいでしょう. 複数のプロキシをつなぎかえる場合は,引数を増やして,スクリプトで確認するサーバを配列にすればよいと思われる.