概要
- Gitリポジトリ をサーバーで管理し、SSH経由で クローン・同期 する方法の解説
- receive.denyCurrentBranch 設定による 複数端末での作業最適化
- git-over-http 公開のための update-server-info 運用手順
- Gitフック を活用した自動処理や静的サイト生成の実践例
- バックアップ や バージョン管理 による安全性の確保
サーバー上のGitリポジトリをSSH経由でクローン・同期する方法
- サーバー上に Gitリポジトリ を設置し、 SSHアクセス を利用した運用
- ローカル端末で以下のコマンドを実行し、リポジトリをクローン
git clone ssh://username@hostname/path/to/repo - ローカルで作業後、 originサーバーへプッシュ 可能
- デフォルトでは、 現在チェックアウト中のブランチへのプッシュは禁止
- サーバー側で以下コマンドを実行し、制限を緩和
git config receive.denyCurrentBranch updateInstead - 複数PC間での コード同期 や、 サーバー側ファイル編集 の効率化
GitリポジトリをHTTP経由で公開する手順
- Webサーバーに Gitリポジトリ を公開し、HTTPクローンを有効化
git clone https://hostname/path/to/repo/.git .gitディレクトリ名をURLから省略するにはサーバー側設定やリネームが必要 (ただしリネームはサーバー側Git操作が制限されるため注意)- HTTP経由でのクローンを有効にするため、サーバーで以下コマンドを実行
git update-server-info - リポジトリ更新のたびに再実行 が必要
git update-server-infoの自動化とGitフック活用
- post-updateフック を利用し、
git update-server-infoの自動実行を設定- サンプルフックをコピー
cp .git/hooks/post-update.sample .git/hooks/post-update - 実行権限を付与
chmod a+x .git/hooks/post-update
- サンプルフックをコピー
- post-updateフック はシェルスクリプトとしてカスタマイズ可能
- 例えば、 静的サイトジェネレータ の自動実行も可能
cat > .git/hooks/post-update <<EOF #!/bin/sh set -euo pipefail cd /path/to/site /path/to/generator EOF chmod a+x .git/hooks/post-update - ネットワーク遅延なくローカルで執筆 し、サーバーへプッシュ後に自動処理
Git運用のメリットと安全性
- サーバー障害時も ローカルコピー がバックアップとして機能
- 端末故障時も サーバーからの再取得 が可能
- バージョン管理機能 により、誤削除やトラブル時の原因特定が容易
- 信頼性と効率性 を両立した運用手法