gitのgitによるgit(ユーザ)のためのリポジトリ管理

Ken published on
5 min, 948 words

Categories: Linux

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連携、これは参考になるサイトが無く、試行錯誤。 結果的には次の手順で出来た。

  1. ローカルでリポジトリ作成
  2. サーバーにpush
  3. Eclipseにgitプラグインを追加(http://www.jgit.org/update-site)
  4. Eclipse:File → Import → Git Repository

サーバー側でリポジトリを作成してしまえばEclipseでImportするだけなんだけど、gitosisによるお手軽管理かつ、サーバーにログインしなくても設定出来る手順でした。

ファイルを編集するとEclipseのPackage Explorerには "> ファイル名" って表示になるんだけど、commitしても、pushしても ">" が消えてくれず、そのままのファイルがある。 commitしたら消えてくれるんじゃないのか!? テストケースも動作したし、gitを使うということに関してはこれで大丈夫なんじゃないかな。

gitしてgitして、gitしたら管理出来るのか!!と思ったら、妙なタイトルになった🙄