HALでGithubへプッシュする方法＆自動切り替え

# 学校法人・専門学校HALでGit！！
[HAL Advent Calendar 2016](http://qiita.com/advent-calendar/2016/hal)
HAL生によるアドベントカレンダーで投稿した記事です。

## なぜわざわざ記事にしたか
ただ、Githubへプッシュするだけなのに、なぜいちいち記事にしたかと言いますと、HALでは外部への通信はプロキシを経由するため、すんなりと出来ないという問題があります。少し考えれば分かる解決法なのですが、それに辿り着く前にテザリングで我慢する学生も少なくないので、今回はそれを記事にしました。
※学校的には無駄にポートを開放出来ないので、仕方ないと思います。
HAL東京ではこの問題は起きないそうです。

~~## 対象のOSと学生
申し訳ありませんが、私がMacということから、OSXのみを想定しています。ですが、Windowsでも同じことをすれば可能です。時間があればそっちも書きます。
また、今回はHAL大阪の設定になります。他校バージョンあれば、Githubにプルリクください。~~

## MacもWindowsも対応可能です
HALの学生はWindowsユーザーが多こともあり、Windowsでの対応も致しました。
この記事の下部に設定方法を添えますので、そちらで確認してください。

## プッシュ出来ない原因と課題
設定を詳しく知っているわけではないですが、Proxyを経由するということは、許可されているポート以外は遮断されます。恐らく、80と443以外は閉まってる気がします。
加えて、プロキシにはユーザーを認証する機能が存在するので、そこをパスする必要があるという二点を回避する必要があります。

### 一番ラクな解決策

以下のような感じで、configにプロキシに合わせた設定を直接入力する方法があります。しかし、これだと学外だと使えないという問題がありました。

```bash
$ git config --global http.proxy http://学籍番号:認証PW@proxy03.osaka.hal.ac.jp:8080
$ git config --global url."https://".insteadOf git://
```

## 解決するためのシェルスクリプト

```bash:hal_proxy.sh
# License: MIT
# (c) 2016 jumpei"pei"chikamori http://ganbaruman.xyz/portfolio

#!/bin/bash

# 設定してください
user=学籍番号
password=認証PW

# git
git config --global --unset http.proxy
git config --global --unset https.proxy
git config --global --unset url."https://".insteadOf
sed -i '' -e '/http/d' ~/.gitconfig
sed -i '' -e '/https/d' ~/.gitconfig

# npm
npm -g config delete proxy
npm -g config delete https-proxy

unset http_proxy
unset https_proxy
unset ftp_proxy
unset all_proxy

# HAL
if ping -c 3 proxy03.osaka.hal.ac.jp >/dev/null 2>&1
then
    proxy_hal=http://$user:$password@proxy03.osaka.hal.ac.jp:8080
    git config --global http.proxy $proxy_hal
    git config --global https.proxy $proxy_hal
    git config --global url."https://".insteadOf git://

    npm -g config set proxy $proxy_hal
    npm -g config set https-proxy $proxy_hal

    export http_proxy=$proxy_hal
    export https_proxy=$proxy_hal
    export ftp_proxy=$proxy_hal
    export all_proxy=$proxy_hal
fi
```

やっていることは簡単で、対象のプロキシと導通確認が取れたら、学校用のプロキシにする。それだけのシェルスクリプトです。
※現在プルリクなどで改良も加えられているので、git以外の対応も増えてきています。もっと増やして便利にしたい方はプルリクよろしくです。

### 起動の度に自動で設定を変更する

.bashrcに記述してください。　（ターミナルやgit bash起動した時に実行）
上記で書いたシェルスクリプトを貼り付けるか、hal_proxy.shというファイルを作成して、読み込むかのどちらかの処理を記述してください。
zshの人は.zshrcに記述してください。

特定のリポジトリにだけ適用したい時は、pre-pushで実現できます。
今回は基本的に全てのリポジトリを想定しているので、
使い方が分かりやすく載っているサイトを紹介しておきます。
[pre-pushの使い方](http://www.unitrust.co.jp/%E3%81%8B%E3%82%86%E3%81%84%E3%81%A8%E3%81%93%E3%82%8D%E3%81%AB%E6%89%8B%E3%81%8C%E5%B1%8A%E3%81%8Fgit%E3%83%95%E3%83%83%E3%82%AF%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%82%AF%E3%83%A9/)
## それぞれのOSでの設定方法

### Windows
Git bashをインストールして起動し、設定コマンド通りに入力していってください。
[Git bashのダウンロード](https://git-for-windows.github.io/)

### Mac
ターミナルを開いて、設定コマンド通り入力してください。
XCodeをインストールするか、[gitインストール手順](http://techacademy.jp/magazine/5304)を参照してください。

## 設定コマンド

以下のコマンドを順番に入力してください。
**$は入力コマンドに含めないでください。**

```bash
$ git clone https://github.com/tikasan/hal_proxy_over_git.git
$ cp hal_proxy/hal_osaka_proxy.sh ~/hal_osaka_proxy.sh
$ touch ~/.bashrc
$ vi ~/.bashrc
$ source ~/.basrc
```

vi ~/.bashrcにて記述する内容は以下の通りです。
vimの操作がうまく出来ない人は直接ファイルを開くか、友達にやってもらってください。

```bash:.bashrc
~/hal_osaka_proxy.sh
```

上記の設定だと、ターミナルまたはGit bash起動する度に自動的にプロキシの設定が上書きされます。

## イケてるシェルスクリプトまたは他校バージョンあれば
一応、Githubにアップしましたので、暇な人はプルリクしてください。
[hal_proxy_over_git](https://github.com/tikasan/hal_proxy_over_git)