Git リポジトリを WebDAV で扱う

Git に挑戦して悪戦苦闘の末に WebDAV 経由で使えるようになったのでメモっとく。

メインリポジトリを置くサーバは CentOS 5.4 に git-1.5.2.1-1.el5.rf
クライアントは Win7 + msysGit git version 1.6.5.1.1367.gcd48

Apache の WebDAV 設定

/var/www/gitrepos/ 以下にリポジトリを置くことにして、外からは http://***/git/リポジトリ名 でアクセスするようにする。

設定は git.conf に書いて、再起動
# emacs /etc/httpd/conf.d/git.conf

Alias /git/ /var/www/gitrepos/
<Location /git/>
        DAV on
        AuthType Basic
        AuthName "Git"
        AuthUserFile /var/www/gitrepos/.htpasswd
        Require valid-user
</Location>

# /etc/init.d/httpd restart

Git リポジトリの作成

テストとして test.git というリポジトリを作る。

# cd /var/www/gitrepos/
# mkdir test.git    # ディレクトリを作って
# cd test.git/
# git --bare init --shared=true    # リポジトリ初期化
Initialized empty shared Git repository in /home/gitrepos/test.git/
# git --bare update-server-info
# chown -R apache: .   # WebDAV 経由で扱うためオーナーを apache:apache に変更

これで http://サーバ名/git/test.git にアクセスすれば test.git リポジトリを操作できるようになる。

クライアントで clone & commit & push

C:\>git clone http://ユーザ名@***/git/test.git test  # clone する Basic認証があるきは ユーザ名@ を忘れずに
Initialized empty Git repository in C:/test/.git/
Password:    # パスワード入力
warning: You appear to have cloned an empty repository.

C:\>cd test

C:\test>touch test.txt     # 適当にファイルを作って add

C:\test>git add test.txt

C:\test>git commit -m "init commit"   # 適当に commit
[master (root-commit) 8816b32] init commit
 0 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 test.txt

C:\test>git push origin master    # リモートリポジトリに push
Password:
Fetching remote heads...
  refs/
  refs/tags/
  refs/heads/
updating 'refs/heads/master'
  from 0000000000000000000000000000000000000000
  to   8816b323d4d5a0727110bf74c9d517dd376ec737
    sending 3 objects
    done
Updating remote server info

C:\test> cd ..

# push できたか別ディレクトリに clone してみる
C:\>git clone http://ユーザ名@***/git/test.git test2
Initialized empty Git repository in C:/test2/.git/
Password:    # パスワード入力

C:\>dir test2
 ドライブ C のボリューム ラベルは RamDisk-PAE です
 ボリューム シリアル番号は 1234-5678 です

 C:\test2 のディレクトリ

2010/04/21  17:22    <DIR>          .
2010/04/21  17:22    <DIR>          ..
2010/04/21  17:22                 0 test.txt
               1 個のファイル                   0 バイト
               2 個のディレクトリ     461,811,712 バイトの空き領域