SSHデーモンが動いていて、ログインできればOK。
URLはuser@host:/path/to/repo
でよい。
:
のあとの/
を書かなければホームディレクトリからの相対パスになる。
頭にスキームを付けてssh://user@host:port/path/to/repo
と書くこともできる。
この場合は必ずフルパスになるが、ポートを指定できる。
古いプロトコルとスマートなプロトコルのふたつがあるらしい。 HTTPに共通な特徴は以下の通り。
簡単なのは古い方。 HTTPデーモンさえ動いていればCGI不要で使える。 基本的には、
http://host/path/to/repo
。
前者はhttpd.conf
などでURLパスをリポジトリのあるディレクトリにマッピングするか、リポジトリをHTTPのドキュメントルートの下に移すか、シンボリックリンクを張ってしまえばよい。
パーミッションを調整して、HTTPデーモンがリポジトリ内のファイルを読めるようにしておく。
後者はリポジトリ内のhooks/post-update.sample
をpost-update
にリネームして、パーミッションの実行ビットを立てるだけ。
このスクリプトはコミット時に実行されるので、初回は手動で(その場で)実行しておくとよい。
pushはできないので、開発者にはsshアカウントを作ってsshでpush、公開にはHTTPという使い方になるだろう。
CGIを設置する必要があるが、ファイルをまとめて圧縮してやり取りするのでcloneが速い。
CGI自体はgitのバイナリリリースに同梱されていて、git-http-backend
という名前。
うちのディストリでは/usr/lib/git
の下に入っていた。
CGIの設定はこんな感じ。
環境変数を設定する必要があるので、mod_env
が必要。
うちはなぜかこれがロードされていなかった(mod_setenvif
はロードされてたのに)。
<VirtualHost *> ScriptAlias /git/ "/usr/lib/git/git-http-backend/" SetEnv GIT_PROJECT_ROOT /pub/git SetEnv GIT_HTTP_EXPORT_ALL <Files git-http-backend> Require all granted </Files> </VirtualHost>
/pub/git
というのはこのあと説明するGitWebが使うデフォルトのリポジトリ置き場。
pushしたい場合はリポジトリを共有リポジトリとして初期化してパーミッションを調整しておく。
誰でもpushできるようにするにはリポジトリの設定でhttp.receivepack
をtrue
に設定しておく必要がある。
このパラメータがfalse
(デフォルト)だと認証されたユーザーだけがpushできる状態になるが、認証されたかどうかはREMOTE_USER
環境変数で見ているらしい。
nginxのfastcgi_param
などには設定が入っていないので、nginxの設定ファイルなどでfastcgi_param REMOTE_USER $remote_user;
のように書いておく必要がある。
pushは認証ユーザーのみ、cloneは誰でも、という認証のかけ方も可能だが、これはHTTPサーバーの機能に依存。
マニュアルにはApacheの例が載っているが、指定されたURLからアップロードかダウンロードかを判断してアクセス制御する方式なので若干ハナモゲラ。
だったらLocation
で制御したほうが楽なんじゃないかと思う。
その他、man git-http-backend
すると有益な情報を得られる。
リポジトリブラウザCGI。
gitのソースにくっついてくる。
CGIの動くHTTPデーモンが必要。
他にもいろいろ要件があるけど、gitweb/INSTALL
に書いてあるので各自で確認。
結局、やらなければいけない作業は、
make ... install-gitweb
する
make ... install-gitweb
では少なくとも以下の変数を設定する必要があるだろう。
gitweb/INSTALL
を見ると、まずmake ... gitweb
するように書いてあるが、今のところ、これらの変数はinstall-gitweb
のときにも指定しないとダメなので、make ... gitweb
にはあまり意味がないように思う。
git
の実行ファイルの置いてあるディレクトリの親ディレクトリに設定する。
普通は/usr
。
gitをソースから入れた人はその時の設定、例えば/usr/local
。
ちゃんと指定しないとPATH
環境変数の最初の要素を持って行ってしまう。
リポジトリがあちらこちらに散らばっている場合、新しくひとつディレクトリを作って、その中に各リポジトリへのシンボリックリンクを押しこんでおけばよい。
この戦略を採る場合、この変数のデフォルトは/pub/git
なので、/pub/git
ディレクトリを作ってそこにシンボリックリンクを押しこめば、この変数は設定しなくてよい。
最後に、HTTPデーモンからCGIを叩けるようにする。 Pro Gitにはいろいろ書いてあるが、とにかくCGIが実行できるようにすればいいので、Apache httpdならこんな感じ。
<VirtualHost *> <Directory "/path/to/gitweb"> Require all granted Options ExecCGI AddHandler cgi-script cgi DirectoryIndex gitweb.cgi </Directory> </VirtualHost>
あとはHTTPデーモンを再起動して、gitwebdir
で指定したディレクトリに対応するURLをブラウザから叩けばよい。
Ubuntu(bionic)のnginxではCGI.pm
が見つからなくて、libcgi-pm-perl
をインストールする必要があった。
Descriptionフィールドにはリポジトリ内のdescription
ファイルの内容の最初の1行が表示されている。
このファイルはpushして更新したりはできないので、手作業で更新する必要がある。
ベアリポジトリでなければシンボリックリンクを張っておく手もあるけど。
cloneurl
というファイルを作っておくとcloneするURLを表示してくれる。
このファイルは2行以上にすることもでき、HTMLのタグを含めることもできる。
<A>
を埋めておくとよいだろう。
その他、man gitweb
すると有益な情報を得られる。
Copyright (C) 2018-2020 akamoz.jp
$Id: git-servers.htm,v 1.10 2020/02/06 16:06:27 you Exp $