ローカルネットワーク向けgit公開サーバ(HTTP)

HTTPを使ったローカルネットワーク環境でのgitリポジトリの公開方法についてまとめる。ローカルネットワーク向けなのでセキュリティやリポジトリへのアクセス速度は気にしないことにする。なお、以下の作業はDebian 7.1 (Wheezy)のインストールオプションに "Web server" を指定した場合を前提としている。
/etc/apache2/sites-enabled/000-defaultを見ると

DocumentRoot /var/www

となっているので、この下に公開用gitリポジトリを置くことにする。

まずはApacheWebDAVBASIC認証の設定を行う。/etc/apache2/conf.d/git.confを作成し、以下のように編集する。

<Location /git>
  Options -Indexes
  DAV on
  AuthType Basic
  AuthName "Git repository"
  AuthUserFile "/var/www/git/.gitusers"
  Require valid-user
</Location>

BASIC認証用のパスワードファイルを用意する。

# mkdir /var/www/git
# cd /var/www/git
# htpasswd -c .gitusers username(ユーザ名)

WebDAVを使えるようにするため、以下のコマンドを実行。

# a2enmod dav_fs
# a2enmod dav       # dav_fsだけでよいかも

Apacheを再起動する。

# service apache2 restart

webブラウザhttp://localdomain/gitにアクセスして正しく認証できることを確認する。
公開用のgitリポジトリを設置する。

# cd /var/www/git
# git clone --bare ~/hoge hoge.git
# cd hoge.git
# touch git-daemon-export-ok
# git update-server-info
# mv hooks/post-update.sample hooks/post-update
# chown -R www-data:www-data /var/www/git

以上で設置完了。クライアントからcloneできることを確認する。

$ git clone http://username@localdomain/git/hoge.git          # ユーザ名を指定する場合
$ git clone http://username:password@localdomain/git/hoge.git # ユーザ名:パスワードを指定する場合
$ 何か編集
$ git commit -m "comment on modification"
$ git push