Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

学校法人・専門学校HALでGit!!

HAL Advent Calendar 2016
HAL生によるアドベントカレンダーで投稿した記事です。

なぜわざわざ記事にしたか

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

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

MacもWindowsも対応可能です

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

プッシュ出来ない原因と課題

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

一番ラクな解決策

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

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

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

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の使い方

それぞれのOSでの設定方法

Windows

Git bashをインストールして起動し、設定コマンド通りに入力していってください。
Git bashのダウンロード

Mac

ターミナルを開いて、設定コマンド通り入力してください。
XCodeをインストールするか、gitインストール手順を参照してください。

設定コマンド

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

$ 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の操作がうまく出来ない人は直接ファイルを開くか、友達にやってもらってください。

.bashrc
~/hal_osaka_proxy.sh

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

イケてるシェルスクリプトまたは他校バージョンあれば

一応、Githubにアップしましたので、暇な人はプルリクしてください。
hal_proxy_over_git

halprogramming
専門学校HALのプログラミングが好きな人が集まっている同好会です。HALの在学生に限らず、OB, OGなども存在します。
https://www.hal.ac.jp
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away