はじめに
github以外でリモートのgitリポジトリを作りたくなったことはないだろうか?自分のローカルのソースを会社や研究室の誰かと共有したくなったとき、でもメインのリポジトリはsubversionで運用されていてgitのはない。対して、githubで有料なプライベートgitリポジトリを持つほどではない。そんなリクエストを持つライトユースなgitリポジトリをgitoliteで作る方法を紹介します。
※なお、ここではクライアントはLinux, Mac OS X、サーバはubuntuで作業する前提で話を進めます。Windowsでも作業内容自体は変わらないと思いますが、コマンドラインベースには進めないと思うので、割愛します。
インストール方法
セットアップには、クライアントパソコン(自分のパソコン)でやる作業と、リポジトリをおくサーバサイドのパソコンでやる作業の2つがあります。
下準備:クライアントパソコンで
まず、サーバのリポジトリをセットアップするために、admin用の公開鍵、秘密鍵を作成する必要があります。admin用のものを作ってもかまわないし、自分の公開鍵・秘密鍵を転用してもかまいません。まだ、作っていない場合は以下のコマンドで作成します。
$ ssh-keygen -t rsa -f <keyname>
keyname、keyname.pubという2つのファイルが作られます。そのうち、keyname.pubをサーバにコピーします。
サーバでのgitoliteのセットアップ
サーバマシンがubuntuであると想定して、gitoliteをインストールし、セットアップします。事前にカレントディレクトリに上記のkeyname.pubがコピーされているとするとセットアップは以下のコマンド群でできます。
$ sudo apt-get install gitolite
$ sudo adduser --system --disabled-password --shell /bin/bash --group gitolite --home /var/gitolite
$ sudo -H -u gitolite gl-setup keyname.pub
上から
- gitoliteのインストール
- パスワードなし、ホームディレクトリが/var/gitoliteにあるgitoliteユーザを作成
- gitoliteコマンドを使ったセットアップ
を行っています。
ユーザの作成時点では、ホームディレクトリなど各ユーザで入れたいところが異なると思うので、適宜変更してください。
また、gl-setup
はセットアップ途中で、viを用いて設定ファイルの確認を行います。vimでもないため、viユーザ以外は使いにくい。確認用のエディタを変更したい場合は以下のようにすると良いでしょう。
$ sudo -H -u gitolite EDITOR=emacs gl-setup keyname.pub
上記は、エディタとしてemacsを設定している例です。成功すると、以下のファイル・ディレクトリが作成されます。
├── .gitolite
├── .gitolite.rc
├── projects.list
├── repositories
使い方
基本:公開鍵・秘密鍵の設定
何はともあれ、秘密鍵を設定して、ssh経由でリポジトリにアクセスする必要があります。作成した秘密鍵を.ssh以下に配置しましょう。
$ cp keyname ~/.ssh/id_rsa
$ chmod 600 ~/.ssh/id_rsa
管理者のお仕事
管理者のお仕事は、
- ユーザの追加
- 作られたリポジトリのアクセス権の制御
です。この作業を設定ファイルをまとめるリポジトリを編集することで行います。まず、管理者用のリポジトリgitolite-adminのクローンを自分のマシンに作成します。
git clone gitolite@<hostname>:gitolite-admin
成功すると以下のディレクトリ構成が得られます。
├── conf
│ └── gitolite.conf
└── keydir
├── username.pub
ユーザの追加はkeydirの中にアクセスしたいユーザの公開鍵を作ってもらって、それを配置することで行います。
$ cp username.pub keydir/.
$ git add keydir/username.pub
$ git commit -m "add user, <username>"
$ git push
上記では、公開鍵をkeydirに配置し、リポジトリに登録、コミットしてその設定をリモートリポジトリに反映しています。
次にリポジトリのアクセス権は、conf/gitolite.confを編集することで行います。conf/gitolite.confの内容は以下のようになっており、
repo gitolite-admin
RW+ = username
repo testing
RW+ = @all
repo hoge
RW+ = @all
各リポジトリの定義とそのアクセス権が設定されています。現状、testing, hogeというプロジェクトに対して、すべてのユーザがアクセスできるという定義になっています。このアクセス権はこの設定ファイルを編集することで変更することができ、例えば、
repo hoge
RW+ = username
とすることで、hogeというリポジトリにはusernameというユーザのみがアクセスできるようにアクセス権を変更することができます。
ユーザのお仕事
ユーザがする作業は大きく分けて、
- 公開鍵を管理者に渡して、ユーザ登録してもらう
- 必要なリポジトリを作成する
- 作成したリポジトリを使って、コーディングする
の3つです。最初の作業は公開鍵・秘密鍵の作り方自体は前述で紹介したので、作成した公開鍵を管理者に渡してください。次に、自分のローカルで作成しているリポジトリをリモートリポジトリに反映します。なお、git pushが反映されるためには、事前に管理者が上記のgitolite.confに対応するリポジトリ(下記の場合、project)を作成していなければなりません。
$ cd <project>
$ git remote add origin gitolite@<hostname>:<project>
$ git push origin master
管理者からユーザの追加最後の作業はgit共通の作業なので割愛します。以下を参照してください。