gitosisのインストール

会社で複数人がシェアするリポジトリに関してはsvnを使い続けるつもりではいる.しかし,主に筆者個人しか使わない記事執筆や講演プレゼンはsvnからgitに移そうと思い始めた.
講演プレゼンは直前まで手直しすることが多く,雑誌掲載記事は移動中に推敲することが多く,分散リポジトリで管理したい.講演プレゼンの手直しは時間的にもタイトで失敗が許されない.commitに時間がかかり不安定なsvkでは不満も不安も多い.

gitでサーバ側のアクセス管理というとgitosisに定評があるようだけれども,私が勤める会社のサーバはLeopard Server.何も考えずにインストーラ一発で済むはずがないのであった.

サーバ側のセットアップ

gitのインストール

MacPortsとかが多いかもしれないが,筆者は GIT for OS Xを使っている.アンインストール用のスクリプトも用意されていて,将来XToolsがgitをサポートしても混乱が少なそうというのがその理由.なんにせよ,gitが実行できていればよい,はず.

gitosisのインストール

gitosis自身を引っ張ってくる.

$ /usr/local/git/bin/git clone git://eagain.net/gitosis.git
Initialized empty Git repository in /tmp/gitosis/.git/
remote: Counting objects: 614, done.
remote: Compressing objects: 100% (183/183), done.
remote: Total 614 (delta 434), reused 594 (delta 422)
Receiving objects: 100% (614/614), 93.81 KiB | 66 KiB/s, done.
Resolving deltas: 100% (434/434), done.

中身はPyhonで書かれているので,installする.

$ cd gitosis
$ sudo python setup.py install
Password:
running install
running bdist_egg

ずらずらとログが出て,下記のように止まる.

Installing gitosis-init script to /usr/local/bin
Installing gitosis-run-hook script to /usr/local/bin
Installing gitosis-serve script to /usr/local/bin

Installed /Library/Python/2.5/site-packages/gitosis-0.2-py2.5.egg
Processing dependencies for gitosis==0.2
Finished processing dependencies for gitosis==0.2

ここはOSXでなくても手順は同じ.gitosys-* が /usr/local/bin に,Pythonスクリプト群が/Library/Python/2.5/site-packages/に,それぞれ配置されたことを記憶しておく.
特にOSXは,Pythonスクリプトの位置が他のOSと異なるので,後日ハンドパッチを当てようとしてあちこち探し回る羽目に陥りがち.

アカウント名gitの作成

ワークグループマネージャを使って適当に作る.とはいっても適当だとセキュリティホールになるので,そこは常識を持って.筆者は,OpenDirectoryで広く使う機会が想像できなかったので,ローカルアカウントで作った.グループは権限が低いものを選んだ.
次に,Leopard Server のデフォルトでは通っていないパスを通しておく.これを忘れるとクライアントからのclone時にエラーが出る.

$ echo "export PATH=$PATH:/usr/local/bin:/usr/local/git/bin" > ~git/.bashrc 
リポジトリの初期化

リポジトリの初期化を行う.筆者の環境では,既に自アカウントにsshの設定があるので,その id_rsa.pub を使った.

$ sudo -H -u git gitosis-init < ~/.ssh/id_rsa.pub
Initialized empty Git repository in ./
Initialized empty Git repository in ./

ここでアカウント名gitを作る時にホームディレクトリを指定し忘れると下記のようなエラーになる.

Traceback (most recent call last):
  File "/usr/local/bin/gitosis-init", line 8, in <module>
    load_entry_point('gitosis==0.2', 'console_scripts', 'gitosis-init')()
  File "/Library/Python/2.5/site-packages/gitosis-0.2-py2.5.egg/gitosis/app.py", line 24, in run
    return app.main()
  File "/Library/Python/2.5/site-packages/gitosis-0.2-py2.5.egg/gitosis/app.py", line 38, in main
    self.handle_args(parser, cfg, options, args)
  File "/Library/Python/2.5/site-packages/gitosis-0.2-py2.5.egg/gitosis/init.py", line 128, in handle_args
    util.mkdir(generated)
  File "/Library/Python/2.5/site-packages/gitosis-0.2-py2.5.egg/gitosis/util.py", line 7, in mkdir
    os.mkdir(*a, **kw)
OSError: [Errno 13] Permission denied: '/gitosis'

さて,これでサーバ側のセットアップは完了らしい.

アカウントの作り方は違うが,その他の設定に関しては,OSX一般で使える(Leopard Server に限らない)のではないかと思う.

クライアント側での設定

ここから先は,OSX以外の環境と変わらない.もっと詳しく書いてあるブログもあるし,先日取り上げた本にも詳しく書いてある.当日記では省略.