gitレポジトリをhttpで公開する
まだ試しちゃい無いんですが、gitレポジトリをhttpで公開したくなった場合にどうすればいいのかについて。
何が必要か
Apache ウェブサーバをもっていること
Apache の設定ファイルを編集できること
設定ファイルは /etc/httpd にあるか、 Apache のドキュメントを参照してください。
Debianの場合: /etc/apache2 下にあるファイルを編集できる必要がある。
Apache を再起動できること
'apachectl --graceful' とするかもしれません。 もし、そうしない場合、 Apache を停止して、再起動してください。 注意してください、これによりあなたのサーバへの接続は切断されてしまいます。
Debianの場合: $ /etc/init.d/apache2 restart または、 $ /etc/init.d/apache2 force-reload (which seems to do the same)
ディレクトリの権限を変更する権限を持っていること
gitがクライアントにインストールされていること
そして、サーバに git がインストールされているか、 webdav クライアントがクライアントにインストールされていること
事実上、これはあなたがrootになることができるか、 あらかじめ設定されたWebDAVサーバを使用していることを意味します。
ステップ1: bare GIT レポジトリのセットアップ
これを書いている時点では、git-http-push はリモートに GIT レポジトリを作成することは できません。なので我々はサーバ上でgitを使ってセットアップを行わなければなりません。
その他の方法として、クライアント側で bare repository を作成して WebDAVクライアント を利用してサーバにコピーするという方法があります。(これはサーバにGitがインストールされて いない場合、唯一の方法になるでしょう。)
Apache により公開されているディレクトリの DocumentRoot 下にディレクトリを作成してく ださい。この例では /usr/local/apache2 ですが、 "grep DocumentRoot /where/ever/httpd.conf" を試して自分のDocumentRootを見つけてください:
$ cd /usr/local/apache2/htdocs
$ mkdir my-new-repo.git
Debianの場合:
$ cd /var/www
$ mkdir my-new-repo.git
bare repository を初期化します
$ cd my-new-repo.git
$ git --bare init
ディレクトリの権限をウェブサーバのものに変更します。 "grep ^User httpd.conf" と "grep ^Group httpd.conf" でウェブサーバの実行ユー ザを見つけてください:
$ chown -R www.www .
Debianの場合:
$ chown -R www-data.www-data .
もしあなたが Apache の実行ユーザを見つけることができなかった場合は、変わりに "chmod -R a+w ." として、あとで作成されるファイルを点検し、適切にファイルの権限を変更してください。
Apacheを再起動して、http://server/my-new-repo.git がディレクトリを表示しているかチ ェックしてください。もし表示されていなかったのならば、Apacheがちゃんと起動しているか確認し てください。
ステップ2: レポジトリでDAVを有効にする
まず最初に dav_module がロードされているか確認します。 ロードされていない場合は、httpd.confに以下を記述してください:
LoadModule dav_module libexec/httpd/libdav.so
AddModule mod_dav.c
また、locking DAV operations に利用する以下のような行存在するか、チェックしてください:
DAVLockDB "/usr/local/apache2/temp/DAV.lock"
Debian の場合、以下のステップで実行できます:
Apache の dav と dav_fs modules の有効化:
$ a2enmod dav_fs
(just to be sure. dav_fs might be unneeded, I don't know)
$ a2enmod dav
The DAV lock is located in /etc/apache2/mods-available/dav_fs.conf:
DAVLockDB /var/lock/apache2/DAVLock
もちろん、このファイルはどこにあっても構いませんが、Apache ユーザによって書き込み可能でなけ ればなりません。
そして、httpd.confへのこのように、加えてください。
<Location /my-new-repo.git>
DAV on
AuthType Basic
AuthName "Git"
AuthUserFile /usr/local/apache2/conf/passwd.git
Require valid-user
</Location>
Debian の場合 /etc/apache2/conf.d/git.conf を作成して:
<Location /my-new-repo.git>
DAV on
AuthType Basic
AuthName "Git"
AuthUserFile /etc/apache2/passwd.git
Require valid-user
</Location>
Debian は自動的に /etc/apach2/conf.d 下にあるすべての設定ファイルを読みます。
パスワードファイルはどこに置いても良いですが、Apache ユーザには読むことができ、できれば その他世界のすべての人に読めない場所にあると良いでしょう。
このファイルは以下のように作成します:
$ htpasswd -c /usr/local/apache2/conf/passwd.git <user>
Debian の場合:
$ htpasswd -c /etc/apache2/passwd.git <user>
パスワードが聞かれ、ファイルが生成されます。つづいて 別のユーザを追加するためにhtpasswd を呼ぶ場合は、'-c'オプションを削除してください。
パスワードファイルを作成したら、apacheを再起動しましょう。
これで http://
Debian の場合 WebDAV part のテストをするには:
$ apt-get install litmus
$ litmus http://<servername>/my-new-repo.git <username> <password>
もし、Windows XP で WebDAV のテストを行いたいのならば、
Internet Explorer -> Open Location ->
http://
ステップ3: クライアントのセットアップ
例えば curl と一緒にビルドされた git など、HTTP サポートがあることを確認してください。 'git http-push' コマンドをオプションなしで実行すれば利用方法のメッセージが表示されます。
では、$HOME/.netrc に以下を記述してください:
machine <servername>
login <username>
password <password>
そしてパーミッションを変更しましょう: chmod 600 ~/.netrc
もし、あなたが IP アドレスでサーバに接続したいのならば、サーバ名の変わりに IPアドレスを 記述しましょう。
ちゃんと記述されているかどうかは、以下のコマンドで確認することができます:
curl --netrc --location -v http://<username>@<servername>/my-new-repo.git/HEAD
それでは、あなたのすでに存在するローカルのレポジトリをサーバに追加してみましょう!:
$ git-config remote.upload.url \
http://<username>@<servername>/my-new-repo.git/
最後の '/' は重要です。これをつけないとサーバはリダイレクトを多分送ってきますが、 git-http-push は まだそれを理解できないので git-http-push は無限にリクエストを繰り返すことになります。
ステップ4: make the initial push
From your client repository, do
$ git push upload master
This pushes branch 'master' (which is assumed to be the branch you want to export) to repository called 'upload', which we previously defined with git-config.
Using a proxy:
If you have to access the WebDAV server from behind an HTTP(S) proxy, set the variable 'all_proxy' to 'http://proxy-host.com:port', or 'http://login-on-proxy:passwd-on-proxy@proxy-host.com:port'. See 'man curl' for details.
感想
てか、途中で気づいたんだけど、gitレポジトリをbareで作成して DAV で公開するだけのことなんだな。 適当に読んでから訳すか決めればヨカタ。
ちなみに、git を使い始めて感じたんたことだけど、 git はそのアーキテクチャとか考え方を知っていないとかなり使いづらいツール。
最低限 git を始めるなら、git 作者の「入門Git」は読んでおかないと使い倒せない気がする…。