リポジトリの管理 - さくらのVPSを使ってみた

リポジトリサーバーを立てる

ローカルで履歴管理だけやるのでしたらこれ以上の作業は不要で、ローカルにリポジトリを作って適宜ファイルをコミットする運用をすればよく、それはそれで便利です。

複数台のマシンや複数人を対象とした場合や万が一のバックアップとして使う場合は、サーバー上にリポジトリを作ってローカルには複製を置くことになります。

そうなると新しいリポジトリの作成や利用者の追加などの作業が発生します。特に工夫をしなければ都度サーバーにログインしての作業ということになりますが、面倒ですしリポジトリの管理やユーザーの管理も大変です。

管理を楽にするために管理用のツールを使います。管理ツールはいろいろありますがGitoliteを使いたいと思います。

Gitoliteとは

Gitリポジトリの管理ツールです。リポジトリの作成やユーザー管理ができます。

管理にGitを使うのが特徴です。

Gitoliteをインストールする

サーバー側の作業です。

Gitoliteはyumコマンドでインストールできます。

$ sudo yum -y install gitolite

管理用ユーザーの鍵を作成

端末側の作業です。

秘密鍵と公開鍵のペアを作成します。Windowsの場合はPuTTY Download PageにあるPuTTYgenを使うのが簡単だと思います。使い方は検索すれば説明してあるページがたくさん見つかります。

PuTTYgenを使う時に間違えやすいのが公開鍵の作成方法で、「Save public key」ボタンを使うのではありません。画面上部にある「Public key for pasting into OpenSSH authorized_keys2 file:」と書かれている欄の文字列を使います。

秘密鍵のファイル名は任意ですが、以下ではgitoliteというファイル名で作成したとして説明します。他のファイル名にする場合は適宜読みかえてください。

作成した秘密鍵をホームディレクトリーの下の.sshディレクトリーの中に保存します。Windows 7の場合、通常は C:\Users\${ユーザー名}\.ssh です。

Gitを実行する時にサーバー名や秘密鍵の指定を省略できるようにするために設定を追加します。設定はホームディレクトリーの下の.sshディレクトリーの中のconfigファイルに記載します。以下、設定例です。

host gitserver
    user gitolite
    hostname ${ホスト名}
    port ${ポート番号}
    identityfile ~/.ssh/gitolite

Gitoliteの初期設定

サーバー側の作業です。

管理用ユーザーの鍵をサーバに保存します。ここでは/tmp/gitolite.pubで保存したとします。

セットアップコマンドを実行します。

$ sudo su - gitolite
$ gl-setup -q /tmp/gitolite.pub
creating gitolite-admin...
Initialized empty Git repository in /var/lib/gitolite/repositories/gitolite-admin.git/
creating testing...
Initialized empty Git repository in /var/lib/gitolite/repositories/testing.git/
[master (root-commit) 9393af5] gl-setup -q /tmp/gitolite.pub
 2 files changed, 9 insertions(+), 0 deletions(-)
 create mode 100644 conf/gitolite.conf
 create mode 100644 keydir/gitolite.pub

これで管理用のgitoliteリポジトリとテスト用のtestingリポジトリができました。

一般ユーザーの作成と登録

端末側の作業です。

管理用ユーザーの鍵を作成したのと同じ要領で鍵を作ってください。ここでは秘密鍵をuser.key、公開鍵をuser.pubで保存したとします。user.pubのuserの部分がユーザー名になります。suzukiというユーザー名にする場合はsuzuki.pubで保存します。

管理用リポジトリをcloneします。

# コマンド例
$ git clone ssh://gitserver/gitlite-admin

公開鍵をgitolite-admin/keydirの下に保存してリポジトリに登録し、pushします。

# コマンド例
$ git add user.pub
$ git commit -m "userを追加"
$ git push

これで利用者の追加ができました。このように、サーバーにログインせず端末上でgitコマンドを実行するだけでユーザーを作れます。

一般ユーザーでGitを実行する時にサーバー名や秘密鍵の指定を省略できるようにするために設定を追加します。設定はホームディレクトリーの下の.sshディレクトリーの中のconfigファイルに記載します。以下、設定例です。

host gitserver-user
    user gitolite
    hostname ${ホスト名}
    port ${ポート番号}
    identityfile ~/.ssh/user.key

リポジトリの作成

端末側の作業です。

一般ユーザーの作成と登録時にcloneしたリポジトリのconf/gitolite.confファイルを修正します。最初は次のような内容になっています。

repo    gitolite-admin
        RW+     =   gitolite

repo    testing
        RW+     =   @all

gitolite-adminとtestingというふたつのリポジトリがありgitolite-adminはgitoliteのみが、testingはすべてのユーザーが利用できる設定なっています。

リポジトリを作成する時には、このgitolite.confファイルにリポジトリの設定を追加します。app1というリポジトリでuserというユーザが読み書きできるようにするためには次のようにします。

repo    gitolite-admin
        RW+     =   gitolite

repo    testing
        RW+     =   @all

repo    app1
        RW      =   user

ファイルの修正が終わったらcommitしてpushします。

# コマンド例
$ git add gitolite.conf
$ git commit -m "app1リポジトリを作成"
$ git push

作成したリポジトリは次のようにしてcloneできます。

# コマンド例
$ git clone ssh://gitserver-user/app1