gitolite v3.2.0 を入れてみた
今までずっと、次に git 環境を構築するときは gitolite を入れようと思いながら、
かなり時間が経ってしまいました。
やっと入れる機会がきたので、早速導入してみました。
gitosis と gitolite
gitosis は、開発が長い間止まってしまっているらしい。
それに、細かいアクセス制御ができない。(ブランチ別、とか、タグ別、とか。)
なので、今回は gitolite を入れました。
(自宅や研究室では、今も gitosis なので、早めに乗り換えちゃった方がよさそうだなぁ。)
インストール
バージョンが新しくなってから、インストール方法がちょっと変わっている模様。
素直に README を読んでインストールしました。
アカウントの準備
アカウント名は、ここでは gitolite にしていますが、
別に git でも何でも分かりやすい名前でいいです。
初期ユーザ用に、公開鍵を登録します。
ここでは、鍵作成から行っていますが、
既に自分の鍵がある人は、それを使えばよいです。
$ sudo useradd gitolite $ sudo su gitolite (gitolite)$ cd ~ (gitolite)$ mkdir .ssh -m 0700 (gitolite)$ exit $ mkdir ~/.ssh -m 0700 $ ssh-keygen -t rsa (パスワードの設定はなし) $ sudo cp ~/.ssh/id_rsa.pub /home/gitolite/なまえ.pub $ sudo su gitolite (gitolite)$ $HOME/bin/gitolite setup -pk なまえ.pub (gitolite)$ exit $ sudo rm -f /home/gitolite/なまえ.pub
gitolite のインストール
git で最新版をとってきます。
その後の内容は、README に載ってるとおりです。
gitolite の .ssh ディレクトリ内に authorized_keys がある場合は、先に削除しておきます。
(gitolite)$ rm -f ~/.ssh/authorized_keys # もしファイルがあるなら削除しておく (gitolite)$ cd /tmp (gitolite)$ git clone git://github.com/sitaramc/gitolite (gitolite)$ mkdir -p $HOME/bin (gitolite)$ gitolite/install -to $HOME/bin (gitolite)$ cd /tmp (gitolite)$ rm -rf gitolite (gitolite)$ cd ~/ (gitolite)$ $HOOME/bin/gitolite setup -pk なまえ.pub # 初期ユーザを指定して設定実施
これでインストールは終わりです。ほんとサックリ入っちゃうなぁ。
リポジトリの追加とかユーザの追加とか
初期ユーザで、gitolite-admin リポジトリを clone してやります。
$ git clone gitolite@localhost:gitolite-admin
ここでパスワードの入力を求められたら、インストール作業をどこかミスってます。
うまくいけば、こんな表示が出るはず。
Cloning into 'gitolite-admin'... remote: Counting objects: 6, done. remote: Compressing objects: 100% (4/4), done. remote: Total 6 (delta 0), reused 0 (delta 0) Receiving objects: 100% (6/6), done.
ユーザの追加
追加したいユーザの公開鍵を、keydir 内に入れます。
鍵に使える文字は、英数字とピリオド、アンダースコア、ダッシュ(ハイフン)だけです。
ただし、"hoge@your.domain" みたいな形ならアットマークをつけることができます。
でも、"hoge@domain" みたいに、@以降にピリオドがないものはダメらしい。
名前の最後に、拡張子 ".pub" をつけることを忘れないように。
追加し終わったら、コミットして push しておく。
git add keydir git commit -m 'added users hoge and mofu' git push
リポジトリの追加・編集
conf/gitolite.conf を編集する。
デフォルトで、以下の内容が書かれている。
repo gitolite-admin RW+ = なまえ repo testing RW+ = @all
testing はいらないので、消してしまってOK。
testing を消した場合は、後で /home/gitolite/repositories/repotest.git を消しておく。(warning対策)
gitolite-admin は、gitolite の管理者だけ登録しておこう。
後は、追加したいリポジトリを書く。
repo gitolite-admin RW+ = なまえ repo hoge repo bar repo mofu
リポジトリのアクセス権限設定
さて、ここから話が少しややこしくなる。
gitosis と違って、gitolite は詳細なアクセス権限を各ユーザに設定することができる。
公式の README に載っているサンプルは、以下のようになっている。
repo foo RW+ = alice - master = bob - refs/tags/v[0-9] = bob RW = bob RW refs/tags/v[0-9] = carol R = dave
RW は、fast-forward な push やコミットの作成を意味する。
RW+ は、fast-forward に限らず、すべての push を意味する。
ダッシュ '-' は、指定されたブランチやタグへの push を拒否する。
1つ1つ見ていこう。
alice はいかなる操作も許可されている。(RW+ = alice)
bob は、master への push は許可されていない。(- master = bob)
さらに bob は、"v+数字" で始まるタグを作成することができない。(- refs/tags/v[0-9] = bob)
でも bob は、上記以外のブランチ等に対しては、fast-forward な push やコミットの作成を許可されている。(RW = bob)
carol は、"v+数字" で始まるタグを作成することだけができる。( RW refs/tags/v[0-9] = carol)
dave は、clone と fetch だけできる。(R = dave)
どの条件にもマッチしない場合は、拒否される。
これらの条件をうまく使って、conf/gitolite.conf を作成しよう。
作成し終わったら、コミットして push するのを忘れないように。
git add conf git commit -m 'added project hoge, bar and foo gave access to alice, bob, carol' git push
この時点で、gitolite が自動的に空のリポジトリを作成してくれる。
後は、プロジェクトメンバーが追加されたリポジトリを自由に clone して歴史を紡げばいい。
その他
ssh からコマンドを叩くことで、設定情報を見たりできる。
以下の例では、自分がどのリポジトリに対してどういう権限を持っているかを見ている。
$ ssh gitolite@localhost info hello なまえ, this is gitolite@さーば running gitolite3 v3.2-0-g5f9789e on git 1.8.0 R W gitolite-admin R W hoge
info の部分を help に変えると、いろんなコマンドが表示される。
$ ssh gitolite@localhost help hello なまえ, this is gitolite3 v3.2-0-g5f9789e on git 1.8.0 list of remote commands available: desc help info perms writable
設定がうまくいかないときは、これで確認してみるのもよさそう。