プライベートGiteaサーバーとghqを連携させることで、自宅のリポジトリ管理を効率化できる。この記事では、ローカルネットワーク上のGiteaサーバーをghqで管理するための設定手順を記録する。
検証環境
- macOS(ghq導入済み)
- Giteaサーバー:192.168.0.100(HTTPSなし、SSH接続可能)
- 対象リポジトリ:[email protected]:org/repository.git
hostsファイルによるエイリアス設定
プライベートサーバーにわかりやすい名前を付けるため、/etc/hostsでエイリアスを設定する。これにより、IPアドレスではなく意味のあるドメイン名でリポジトリにアクセスできるようになる。
sudo vi /etc/hosts
以下の行を追加する:
192.168.0.100 code.example.com
この設定により、192.168.0.100への接続がcode.example.comとして扱われる。ドメイン名を使うことで、後からサーバーのIPアドレスが変更されても設定変更が容易になるメリットがある。
ghqでのHTTPS接続エラーとその対処
初回のghq実行では、HTTPSでの接続エラーが発生する場合がある。これは、プライベートGiteaサーバーでHTTPS証明書が設定されていないことが原因である。
$ ghq get code.example.com/org/repository.git
error failed to get "code.example.com/org/repository.git": unsupported VCS, url=https://code.example.com/org/repository.git: Get "https://code.example.com/org/repository.git?go-get=1": dial tcp 192.168.0.8:443: connect: connection refused
このエラーメッセージから、ghqがデフォルトでHTTPS(ポート443)での接続を試行していることがわかる。プライベートサーバーではHTTPS設定を行わないことが多いため、SSHまたはHTTPでの接続に切り替える必要がある。
gitconfigによるプロトコル変換設定
最も効率的な解決方法は、Gitの設定でプロトコル変換を行うことである。~/.gitconfigに以下の設定を追加することで、HTTPSのURLが自動的にSSHに変換される。
[ghq]
vcs = git
[url "ssh://code.example.com/"]
insteadOf = https://code.example.com/
この設定のurl.insteadOfは、Gitが特定のURLパターンを別のURLに自動変換する機能である。https://code.example.com/で始まるURLがssh://code.example.com/に置き換えられるため、HTTPSでアクセスしようとしても実際にはSSH接続が行われる。
設定後は、HTTPSのURLを指定してもSSHで接続されるようになる:
$ ghq get code.example.com/org/repository.git
clone ssh://code.example.com/org/repository.git -> /Users/username/ghq/code.example.com/org/repository
リポジトリの配置とアクセス
ghqによってクローンされたリポジトリは、以下のパスに配置される:
~/ghq/code.example.com/org/repository/
この階層構造により、複数のGitサーバーやオーガニゼーションのリポジトリを整理して管理できる。ghqは常にホスト名/ユーザー名またはオーガニゼーション名/リポジトリ名の形式でディレクトリを作成するため、リポジトリの所在が明確になる。
日常的な操作では、以下のコマンドが有用である:
# 管理しているリポジトリ一覧の表示
ghq list
# リポジトリの完全パス表示
ghq list --full-path
# 特定リポジトリへの移動
cd $(ghq root)/code.example.com/org/repository
まとめ
プライベートGiteaサーバーとghqの連携において、/etc/hostsによるエイリアス設定と.gitconfigでのプロトコル変換設定を組み合わせることで、効率的なリポジトリ管理環境を構築できる。特に.gitconfigのurl.insteadOf設定により、HTTPSとSSHの違いを意識することなく、統一されたURLでリポジトリにアクセスできるようになることが重要である。この設定により、プライベート開発環境でのリポジトリ管理が大幅に改善される。