gitのgitによるgit(ユーザ)のためのリポジトリ管理
Eclipseでgit使いたいなぁ〜と思ったけど、githubなどのサービスは公開リポジトリ以外は有料。 レンタルサーバーもあるし、gitサーバーでも用意するか。
ところで、サーバー側ってどうやって構築するんだろう? 調べてみたらgitosisというツールが見つかった。 今のところこれがお手軽そう。 gitosis自体はPythonで書かれているらしい。
■gitosis - Git リポジトリ群の管理とアクセス制御 vol.0 - openbooth http://openbooth.org/archives/60.html
以下、上記ページを参考にしつつ、やったこと。
サーバー側のコンソールは "server" で、クライアント側は "local" で表します。
まずはgitosisのインストール。 コマンド見てすぐわかると思うけど、サーバーはUbuntuです。
server:~$ sudo aptitude install git-core
server:~$ sudo aptitude install python python-setuptools
server:~$ mkdir ~/src
server:~$ cd ~/src
server:~src$ git clone git://eagain.net/gitosis.git
server:~src$ cd gitosis/
server:~src/gitosis$ sudo python setup.py install
続いて、gitリポジトリ管理ユーザを作成する。
server:~src/gitosis$ sudo adduser --system --shell /bin/bash --gecos 'git version control' --group --disabled-password --home /repos/git git
server:~$ sudo -H -u git gitosis-init < /home/ken/id_rsa.pub
server:~$ sudo chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-update
ユーザのホームディレクトリを "--home /repos/git" で指定してます。 /home/gitでもいいんだけど、パーティションなどの都合で違うところにする場合の例としてgitユーザのホームディレクトリの位置を変えてます。 id_rsa.pubはSSHの公開鍵。 実行権限を与えるためにchmod 755しとかないと動かないので要注意。
次はgitリポジトリ管理のためのリポジトリ作成。
local:~/git $ git clone ssh://git@evitat.net/gitosis-admin.git
gitosis-admin/
|-- gitosis.conf
`-- keydir
`-- ken@macbook.local.pub
次は権限情報の編集。
- gitosis.confを編集して権限管理
- keydirに公開鍵を入れてアクセス制限
ということらしい。
とりあえず、自分の使いたいリポジトリの権限を付与するため、次の3行を追記。
local:~/git/gitosis-admin$ vi gitosis.conf
[group new-repos]
writable = new-dir
members = ken@macbook.local
group名はお好きなように。 writableはリポジトリ名。パスを含んだ "lib/new-lib" なんて書き方も出来ます。 membersは接続を許可するユーザ。接続ユーザを追加した場合、公開鍵をkeydirに格納すること。
local:~/git/gitosis-admin$ git commit -a -m "add repos new-repos."
local:~/git/gitosis-admin$ git push
ここでは権限を設定しただけであって、リポジトリ自体は作成されないので、自分で作成する必要がある。
local:~/git$ mkdir new-repos
local:~/git$ cd new-repos
local:~/git/new-repos$ git init
local:~/git/new-repos$ git remote add origin ssh://git@server/new-repos
local:~/git/new-repos$ echo "new repository." > readme.txt
local:~/git/new-repos$ git add readme.txt
local:~/git/new-repos$ git commit -a -m "Initial commit."
local:~/git/new-repos$ git push origin master
これでサーバー側にもリポジトリが出来た。
肝心のEclipse連携、これは参考になるサイトが無く、試行錯誤。 結果的には次の手順で出来た。
- ローカルでリポジトリ作成
- サーバーにpush
- Eclipseにgitプラグインを追加(http://www.jgit.org/update-site)
- Eclipse:File → Import → Git Repository
サーバー側でリポジトリを作成してしまえばEclipseでImportするだけなんだけど、gitosisによるお手軽管理かつ、サーバーにログインしなくても設定出来る手順でした。
ファイルを編集するとEclipseのPackage Explorerには "> ファイル名" って表示になるんだけど、commitしても、pushしても ">" が消えてくれず、そのままのファイルがある。 commitしたら消えてくれるんじゃないのか!? テストケースも動作したし、gitを使うということに関してはこれで大丈夫なんじゃないかな。
gitしてgitして、gitしたら管理出来るのか!!と思ったら、妙なタイトルになった🙄