: O. Yuanying

gitレポジトリをhttpで公開する

Original
Setting up a git repository which can be pushed into and pulled from over HTTP(S).

まだ試しちゃい無いんですが、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://@/my-new-repo.git にアクセスすれば、パスワ ードの確認が行われ、正しいパスワードを入力することでレポジトリが表示されるでしょう。

Debian の場合 WebDAV part のテストをするには:

$ apt-get install litmus
$ litmus http://<servername>/my-new-repo.git <username> <password>

もし、Windows XP で WebDAV のテストを行いたいのならば、 Internet Explorer -> Open Location -> http:///my-new-repo.git [x] Open as webfolder -> login で確認することができます。

ステップ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」は読んでおかないと使い倒せない気がする…。