Ubuntuサーバにgit/gitosis/gitwebを入れてみる

Ubuntuサーバにgitを入れてみました。
あわせてgitosisとgitwebも入れてみました。

gitはもう言わずもがなな分散バージョン管理システムですね。
gitosisはgitのレポジトリの権限周りを管理するツールで、gitwebはgitレポジトリのウェブベースの簡易フロントエンドです。

gitを入れる

まずはgitです。
これは簡単にできます。

基本的にはaptでインストールすればOK。
普通に使う分には、特にこれといった設定も必要ありません。

server $ sudo apt-get install git-core

gitが入ったので、試しにサンプルのレポジトリを作ってみます。

server $ mkdir sample.git
server $ cd sample.git
server $ git init --bare --shared=true

local側で編集して、server側に反映させてみます。
空のレポジトリはクローンできないため、local側で編集したものを、server側にpushします。

local $ mkdir sample.git
local $ cd sample.git
local $ git init
local $ touch test.txt
local $ git remote add origin ssh://server.co.jp/git/sample.git 
local $ git add test.txt
local $ git commit -m "init"
local $ git push origin master

これでレポジトリのクローンが出来ます。

gitosisを入れる

続いてはgitosisです。
gitosisは、このgitosis自体もgitのひとつのレポジトリとして管理されていて、このレポジトリ内の設定ファイルを書き換えてコミットすることによって、git全体の設定を変える、というものです。
まあ、これだけだとよくわからないので、実際に見るのがいいですね。

aptにあるので、インストール自体はすぐです。

server $ sudo apt-get install gitosis

インストールすると、gitosisユーザとそのホームディレクトリとして/srv/gitosisができます。

gitosis-adminというレポジトリができているので、それをクローンしてきて、設定を変更します。

server $ git clone gitosis@localhost:gitosis-admin.git
server $ cd gitosis-admin.git

gitosis-adminレポジトリをクローンしてくると、keydirとgitosis.confが入っています。
レポジトリにコミットする権限を与えるには、権限を与えたい人の鍵をkeydir以下に配置して、その設定をgitosis.confに書くことで行います。
例えば、sampleレポジトリに対してlocalマシンからmkataigi権限でコミットできるようにするには以下のようにします。

server $ cp ~/local_public_key keydir/mkataigi@local.pub
server $ vi gitosis.conf
[group gitosis-admin]
writable = gitosis-admin sample
members = mkataigi@server mkataigi@local
server $ git add .
server $ git commit -m 'add configuration for mkataigi@local'
server $ git push

これで、sampleディレクトリをlocalマシンからコミットできるようになります。

local $ cd ~/sample.git
local $ git remote add origin gitosis@server:sample.git
local $ git push origin master

レポジトリの本体は /srv/gitosis/repositories 以下に作成されます。

gitwebを入れる

続いてはgitwebです。
これはwebベースのgitレポジトリの簡易フロントエンドです。
特にたいしたことが出来るわけではないのですが、ちょっと確認するには便利です。

aptの場合はこれも入っているので、インストールはすぐに終わります。

$ sudo apt-get install gitweb

gitwebの設定ファイルがあるので、レポジトリの配置にあわせて設定します。
ウェブベースなので、CSSなどの読み込みのパスを修正します。

$ sudo vi /etc/gitweb.conf
    $projectroot = "/srv/gitosis/repositories";
    $stylesheet = "/gitweb/gitweb.css";
    $logo = "/gitweb/git-logo.png";
    $favicon = "/gitweb/git-favicon.png";

あわせてapache側も設定します。

$ cd /etc/apache2/sites-available
$ sudo vi gitweb
Alias /git /usr/lib/cgi-bin
Alias /gitweb /usr/share/gitweb
<Directory /usr/lib/cgi-bin>
    Options ExecCGI
    AddHandler cgi-script .cgi
    AllowOverride None
    DirectoryIndex gitweb.cgi
    Order allow,deny
    allow from all
</Directory>
$ cd ../sites-enabled
$ sudo ln -s ../sites-available/gitweb 001-gitweb
$ sudo service apache2 restart

これで http://server/cgi-bin/gitweb.cgi で見えます。

gitosisのレポジトリについては、そのままではパーミッションがありません。
しょうがないので変更してしまいます。

$ chmod 755 /srv/git/repositories/*.git

このあたりは、いまいちなので、うまい回避策調査中です。