持ち運ぶラップトップでgit pushする経路を自動で使い分ける

2026-07-10

作業同期のために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