序
作業同期のためにGitを使ってローカルネットワーク内のサーバーにpushしている場合、持ち運ぶラップトップではローカルネットワークに到達できずpushできない。
常にプロキシを経由してpushできるようにする方法もあるが、ローカルネットワーク内を基本とするならば好ましくないオーバーヘッドが発生する。
そこで、ローカルネットワークにいる場合はmDNS名を使い、そうでない場合はプロキシ経由でpushするようにする。
前提のセットアップ
まずsshで対象のサーバーにアクセスできるようにする必要がある。 Git側では
git remote add proxy server-proxy:path/to/repoのようにできるようにしておく必要がある。
方法は色々あるが、私の場合はローカルサーバー側からssh -RでVPSのlocalhostをlistenするようにしていて、
Host vps
HostName 192.168.100.100
User jrh
IdentityFile ~/.ssh/keys/vps_ed25519
ServerAliveCountMax 3
ServerAliveInterval 10
IdentitiesOnly yes
AddKeysToAgent yes
Host server-proxy
HostName 127.0.0.1
Port 2222
User jrh
ProxyJump vps
のように設定しておく。 これで
ssh server-via-vpsのようにしてログインできるはずだ。
gup
私が使っているのがgupというコマンド。
これは
# Git update
gup() {
git add -A
git commit -m "Updated" && git push
}という単純極まりないもの。 これをラップトップでは拡張する。
if [[ $HOST == laptop ]]
then
gup() {
git add -A || return 3
git commit -m Updated || return 3
if git config --get remote.origin.url | grep -q -F -e 'server.local'
then
if getent hosts server.local > /dev/null
then
git push
else
if git config --get remote.proxy.url > /dev/null
then
print "Use proxy route." >&2
git push proxy
else
print "Unable to connect server and proxy route is not set." >&2
exit 2
fi
fi
else
git push
fi
}
fi