新たに立ち上がる某プロジェクトのすすめかたを考えてたら分散リポジトリを使ったほうが良さそうかも?と、見事な「手段の目的化」に陥ったのでgitを使うことにします。そしてgitリポジトリサーバも立てようではないかと。
けど、gitなんて使ったこと無いし、ましてやリポジトリサーバの管理なんてどんなものかわからないや(cvsやSubversionなら管理してきた)。
クライアント側のgitコマンドはわからないときにググればたくさん答えが出てくるので後からでもどうにでもなるだろうけど、マスターリポジトリはどうやって管理すればいいのかわからないので色々と調べてみました。
で、サーバはgitで管理するよりもgitoliteというツールを使うとなにかと便利そうなのでこれを使うことにします。(別の管理ツールであるgitosisの記事がたくさん出てきたけど、ちょっと古くて最近は更新していないらしい)
- クライアントとマスターリポジトリサーバは物理的(IP的)に別(以下、クライアントとサーバと呼ぶ)
- クライアントからはssh経由でリポジトリにアクセスさせたい
- アカウントによるアクセス制限をかけたい、しかもややこしくない方法で
最終的にこんな条件でgitoliteが動かせればいいかなーと。
ということでgitoliteのインストール。
サーバ側でgitoliteを動かすアカウントが必要らしいので、"git"でアカウントを作る。ちなみにサーバはCentOSね。
# useradd git
次にgitoliteの入手…なんだけど、gitoliteはgitコマンドでcloneするらしく、サーバにはgitがインストールされていなかったためgitのインストールに脱線です。
# wget http://git-core.googlecode.com/files/git-1.8.1.2.tar.gz # tar xvzf git-1.8.1.2.tar.gz # cd git-1.8.1.2 # # makeには各種ライブラリ、ヘッダが必要なのでそれ相応にインストールする # ./configure --prefix=/usr/local # /usr/local以下にインストールすることにした # make && make install
無事にgitが入ったのでgitoliteの入手に戻る。
# git clone git://github.com/sitaramc/gitolite # cd gitolite # ./install -to /usr/local/bin
これでgitoliteがインストールできた模様です。
つぎにgitoliteの管理者アカウントを作成するそうな。
クライアント側にてssh-keygenコマンドで鍵のペアを作っておいて公開鍵をサーバ側にごにょごにょしてコピーします(公開鍵のファイル名はjun_ya.pubとする)。
サーバ側でjun_ya.pubを/home/gitに移動しておきます。(/home/git以下にマスターリポジトリを置くことにしました)
そしてgitoliteのsetupコマンドにて管理者アカウントを設定。
# su - git $ gitolite setup -pk jun_ya.pub
すると、.gitolite、.gitolite.rc、project.list、repositoriesなどのファイルやディレクトリが作成されます。
これでgitoliteの利用準備が整ったみたい。
いよいよクライアント側にgitoliteの管理コマンドをインストールします。gitoliteはクライアント側からコマンドにて諸々の管理を行うみたい。
その前に、クライアント側でサーバへgitでアクセスさせるためのおまじないをしておきます。
~/.ssh/configに
Host {サーバ名} user git hostname {サーバ名} port 22 identityfile 秘密鍵のファイル名
と書いておきます。userの"git"はサーバ側で作成したgitアカウントのことですよ。
そして、
$ git clone git@{サーバ名}:gitolite-admin
とすると、gitolite-adminというディレクトリが作成されてgitolite管理ツール群がインストールされます。
といったところで今日はもうお腹いっぱいなので続きは後日。
ここまでやっておいて何なんだけど、yumとかapt-getでインストールできるのであればそれを使ったほうがラクですよ。自分はどういう仕組で動かすのかを知りたいのでわざわざソースレベルで入れているので。
以下、疑問。
gitoliteのsetupコマンドで作成されるファイルはホームディレクトリ固定なのかな?
.gitoliteディレクトリの下にlogsとか肥大化しそうな気配するんだけど…。
管理ツールを取得する時にクライアント側でgit clone git@〜とするけど、サーバ側でアカウントはちゃんとクライアント側のアカウントが判るようになっているのかな?