gitoliteによるgitサーバ構築、および、使用方法

目的は、グループによるアプリ開発ではなく、gitサーバを立てて、複数のPCでバージョン管理をやることです。具体的には、主に、自宅のデスクトップPCでアプリ開発をやっていて、gitでバージョン管理をやっているのですが、勉強会等で外出先でノートPCでソースをいじり、gitでバージョン管理をやって、デスクトップPCのリポジトリに反映させるにはどうすればいいかの考察です。方法として、自宅LANにgitoliteによりgitサーバを立てて、それぞれのPCでローカルにリポジトリを操作した上で、リモートリポジトリにpushして反映させます。もちろん、企業等でグループでアプリを開発していて、ソースコードをgitでバージョン管理していて、共有サーバにgitのリモートリポジトリを作ることも可能です。その場合、下記説明で、sshの鍵のファイル名にユーザ名とPC名を付けるといいでしょう。

gitサーバ(以下、serverA)のOSはLinux Debian Squeezeを想定。gitサーバを利用するクライアントPCをclientB、clinetCとする。clientBは、アプリ開発やgitによるバージョン管理も行いますが、gitサーバのユーザ管理をしたり、リモートリポジトリにプロジェクトを作成する管理用PCにもなります。

※ ご注意: gitはEclipseのEGitを使って、ローカルでのバージョン管理、githubへのリポジトリのpushをやっていただけなので、素のgitコマンドの扱いには不慣れです。間違った記述もあるかもしれません。

0. なぜ、gitoliteか

お手軽にインストールできるものにGitosisがありましたが、現在開発が止まっており、実際に使おうとすると、サーバにgit pushできないなどの不具合があります。また、最近、Gitoriousが人気のようですが、インストール作業が大変です。debパッケージではないRuby enterprise、Sphinx、Apache ActiveMQとかのインストールが必要です。debパッケージでないものを入れるということは、システムのアップデートで動かなくなる可能性があるということであり、開発しているアプリのソースコードをそこに入れるのは不安です。gitoliteは、DebianのSqueezeで手軽にインストールできるので、このインストール方法、設定、使い方について考察します。

1. gitoliteのインストール

serverAで

# apt-get install gitolite

以下の特別パッケージがインストールされます:

git liberror-perl

提案パッケージ:

git-doc git-arch git-cvs git-svn git-email git-daemon-run git-gui gitk

gitweb

以下のパッケージが新たにインストールされます:

git gitolite liberror-perl

アップグレード: 0 個、新規インストール: 3 個、削除: 0 個、保留: 0 個。

2. 管理者用鍵作成

clientBで

$ ssh-keygen

Generating public/private rsa key pair.

Enter file in which to save the key (/home/foo/.ssh/id_rsa): /home/foo/.ssh/admin_cleintB

Enter passphrase (empty for no passphrase): パスフレーズ入力

serverAの/tmpに公開鍵admin_clentB.pubをファイル転送して、

# chmod a+r /tmp/admin_clentB.pub

clientBは管理者用PCで、このPCでgitサーバにgit pushするPCおよびユーザの追加や、リモートリポジトリでのプロジェクトの作成を行います。

3. gitoliteの設定

serverAで

# dpkg-reconfigure gitolite

gitolite で利用するシステムユーザ名: gitoliteのまま

リポジトリのパス (path): /var/lib/gitoliteのまま

管理者の鍵: /tmp/admin_clentB.pub

4. sshでconfigの設定

clientBで

$ vi ~/.ssh/config

host serverA

user gitolite

hostname serverAのIPアドレス

port 22

identityfile ~/.ssh/admin_clientB

hostはgitoliteサーバのホスト名、userはgitolite、hostnameはgitoliteサーバのIPアドレス、identityfileは管理者用秘密鍵のファイル名。

5. 管理者用リポジトリの取得

clientBで

$ cd

$ git clone gitolite@serverA:gitolite-admin

パスフレーズ入力

6. clientCにあるプログラムのソースコードをgitoliteサーバのリポジトリに置けるようにする

clientCで鍵生成

$ ssh-keygen

Generating public/private rsa key pair.

Enter file in which to save the key (/home/foo/.ssh/id_rsa): /home/foo/.ssh/clientC

Enter passphrase (empty for no passphrase): パスフレーズを入力

clientBの~/gitolite-admin/keydirディレクトリにclientCの公開鍵clientC.pubをファイル転送。

テストとして、リポジトリmyprojを作り、clientBとclientCからgitでリモートリポジトリを操作できるようにする。
clientBで

$ vi ~/gitolite-admin/conf/gitolite.conf

repo myproj

RW+ = admin_clientB clientC

を追加。
gitoliteサーバのリポジトリに反映させる。

$ cd ~/gitolite-admin

$ git add .

$ git commit -m "add user of clientC and add new project myproj"

$ git push

このとき、clientCの公開鍵もリモートリポジトリに格納される。

7. 使い方

clientBで適当なディレクトリにプロジェクト作成。

$ cd ~/tmp

$ mkdir myproj

$ cd myproj

初期化

$ git init

何かファイル作成

$ touch Test.java

コミット

$ git add .

$ git commit -m "add Java file"

リモートリポジトリの追加

$ git remote add origin gitolite@serverA:myproj.git

push

$ git push origin master

8. clientCでリポジトリをcloneして、ソースをいじれて、リモートリポジトリを操作できるようにする

clientCで

$ vi ~/.ssh/config

host clientC

user gitolite

hostname serverAのIPアドレス

port 22

identityfile ~/.ssh/clientC

identityfileのところだけ、clientBの設定を修正。

テストとして、myprojのcloneを取得

$ git clone gitolite@serverA:myproj.git

$ cd myproj

ソースをいじって、add、commit、push

$ git add .

$ git commit -m "some comment"

$ git push

9. Eclipseで利用する

EGitプラグインでローカルにリポジトリの管理はできますが、リモートリポジトリにgit pushするのはエラーが出て、うまくいかないことがあるようです。したがって、ローカルでのバージョン管理は、EGitを利用するか、gitコマンドでやり、リモートリポジトリにpushするときは、gitコマンドで行います。

Eclipseでプロジェクトを作り、ソースコードを編集して、ローカルでバージョン管理をします。リモートリポジトリにpushするときは、管理用PCでリポジトリsumeprojを作り、gitサーバにpushした上で、ソースコードを編集していたPCで、

$ git remote add origin gitolite@serverA:sumeproj.git

$ git push origin master

とかとやります。

また、別のPCのEclipseに取り込むには、一度、適当なディレクトリで、

$ git clone gitolite@serverA:sumeproj.git

とやって、cloneを取得して、Eclipseでは、既存のプロジェクトをインポートする方法で、sumeprojの中のディレクトリを指定してインポートします。そのPCでソースコードをいじり、ローカルでバージョン管理をして、リポートリポジトリにpushするには、Eclipseのworkspaceのプロジェクトのディレクトリでgitコマンドでpushします。

10. ブランチを指定してダウンロードする

ブランチがいくつか作成されたリポジトリsomeprojのcloneを取得

$ git clone gitolite@serverA:someproj.git

全てのブランチを表示

$ git branch -a

リモートにremotes/origin/somebranchがあるとして、somebranchをローカルに作成

$ git checkout -b somebranch remotes/origin/somebranch

11. 参考url

http://www.atmarkit.co.jp/fjava/rensai4/devtool26/devtool26_1.html
http://www.atmarkit.co.jp/fjava/rensai4/devtool26/devtool26_2.html
http://sho.tdiary.net/20110422.html
http://glassylamp.blogspot.com/2010/11/git.html


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2012-01-07 (土) 08:04:21 (2089d)