バージョン管理にGitを使い始めました。Gitいいですよね。
Gitが何かということについては結構情報もあるのでそちらをどうぞ。
一番手軽に始めるならgithubがオススメです。名だたるオープンソースのリポジトリがここで運用されています。ですが、オープンソースを促進するサービスなので無料ではパブリックなリポジトリまでしか作れなかったり。
ということでサーバーにgitをインストールして、さらにGitosisでリポジトリ管理を簡単にしたいと思います。
今回はクライアントがMac OS X 10.6 (Snow Leopard)とサーバーにCentOS 5を想定しています。また、SSH経由でログイン、新規ユーザーを作れる権限を持っていることを確認してください。
Gitインストール
Snow LeopardにGitをインストールします。
パッケージインストーラーがあるのでDLしてインストールしてください。(git-1.7.2.2-intel-leopard.dmg 2010/8/26 現在)
$ git --version
で「git version 1.7.2.2」と出てきたらインストール成功です。
クライアント側にはユーザー情報を登録します。
それぞれ自分の名前とメールアドレスを入れて下さい。
$ git config --global user.name "Konata Izumi"
$ git config --global user.email "konata@example.com"
次にCentOSにgitをインストールします。
ちなみに色々とやり方があるみたいなので自分のやり方でもいいです。
今回はPro Gitに書いてあるとおりにします。
$ sudo yum install git-core
簡単ですね。yumにgit-coreがない場合などはEPELを有効にします。
$ sudo yum --enablerepo=epel git-core
これでインストールできるのですが、「git version 1.5.5.6」とバージョンが古いです。ま、これでも問題はないでしょう。Cent OSなので仕方ないw
[追記] いや仕方なくない。rpmforgeリポジトリから1.7.2をインストールしました。
64bit (x86_64) の場合:
$ sudo rpm --import http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt
$ sudo rpm -ivh http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.1-1.el5.rf.x86_64.rpm
32bit (i386)の場合:
$ sudo rpm --import http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt
$ sudo rpm -ivh http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.1-1.el5.rf.i386.rpm
Gitをインストールします。
既に古いGitがある場合:
$ sudo yum --enablerepo=rpmforge install git-core
Gitをまだインストールしていない場合:
$ sudo yum --enablerepo=rpmforge update git-core
[追記終了]
リポジトリを作ってみる
このセクションは一般的にサーバーにリポジトリを作る方法を載せていますが、今回は最終的にgitosisでの運用を考えているのでこういうモノだと読み飛ばしてください。
サーバーにログインして、
$ mkdir someRepository.git
$ cd someRepository.git
$ git init --bare
これでリポジトリができたのでクローンします。
Macから以下を実行でクローンできます。
$ git clone SSH_USERNAME@YOURDOMAIN:someRepository.git
例えばREADME(空)を追加しできるのでこれにコミットしてプッシュします。
$cd someRepository/
$ touch README
$ git add .
$ git commit -am "READMEを作成"
$ git push
これでサーバーに反映されました。
ではもう一人のユーザーがそのソースをクローンしようとしたらどうでしょう。
同じSSH_USERNAMEで入るのであればいいですが、SSHのユーザー管理とgitのユーザー管理は別にしたいものです。普通はサーバー管理者と、プロジェクト管理者は別ですからね。
GItosisを使う
SSHの管理とGitの管理を分離する。分離したほうがややこしくなるケースというものは往々にしてあり得ることなのですが、サーバー管理とプロジェクト管理という意味で考えれば分離したほうがいいなと。サーバー管理者はgit用のユーザーを作って終わりですからね。
というわけでGitosisというものを使います。
サーバーにGitosis用のユーザーをつくり、そのユーザーにプロジェクトリポジトリ、リポジトリユーザーの管理などを肩代わりさせます。
また、Gitosisが面白いのはプロジェクト管理、プロジェクト毎のユーザー管理自体をgitで管理してしまうというものです。
Gitosisのインストール
$ yum install gitosis
Gitosis用ユーザーの作成
gitというユーザーを作ります。デフォルトではgitosisというユーザー名になるのですがgithub風( git@example.com:repository_name.gitでクローンできるよう)にします。
$ su -
# useradd -g root git
# passwd git
公開鍵をサーバーへコピー
Gitosisの設定を行う前に、クライアントにあるSSHの公開鍵をサーバーにコピーしておきます。
そのためにまず公開鍵を作成します。
クライアント側で下記を実行して公開鍵をつくります。途中パスフレーズを聞かれますが空でもOKです。
$ ssh-keygen -t rsa
Enterを連打した場合 ~/.ssh/id_rsa.pub というファイルが作成されているかとおもいます。
これが公開鍵です。
これをサーバーにコピーします。
$ scp ~/.ssh/id_rsa.pub SSH_USERNAME@YOURDOMAIN:/tmp/YOURNAME.pub
これで自分の公開鍵を /tmp/YOURNAME.pub としてコピーしました。
gitosisの初期化
サーバー上でコピーされた鍵を使いgitosisの初期化を行います。
公開鍵はgitosis-adminの最初のユーザーとなりgitosis-adminの設定ができるようになります。
$ sudo -H -u git gitosis-init < /tmp/id_dsa.pub
次にgitosisの実行権限を設定します。
$ sudo chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-update
これで設定は終わりです。あとは全てクライアントで作業できます。
リポジトリの管理
先も言いましたがgitosisはリポジトリ管理をgitで更新します。
つまりリポジトリを管理するするリポジトリ。なんとも不思議な感じです。
$ git clone git@YOURDOMAIN:gitosis-admin.git
ここでクローンしたgitosis-adminというリポジトリが管理用のリポジトリです。ややこしいですねw
中身をみてみると
となっています。
まずUSERNAME.pubを開くと先程転送した公開鍵がここにはいっていることがわかります。
keydirの中に{ユーザー名}.pubという名前でユーザーを追加することで簡単にユーザーを作成できます。
次にgitosis.confを見てみましょう。
[gitosis]
[group gitosis-admin]
writable = gitosis-admin
members = USRNAME
これはgitosis-adminのリポジトリの情報です。
つまりあたらしいリポジトリhoge-repoをつくるとしたら以下のように追加します。
[gitosis]
[group gitosis-admin]
writable = gitosis-admin
members = USRNAME
[group hoge-repo]
writable = hoge-repo
members = USRNAME USER2 USER3
ついでにUSER2とUSER3を追加してみました。
keydirにもUSER2.pubとUSER3.pubを追加してください。
これをサーバーにプッシュすれば新しいユーザーとリポジトリが増えました。
$ git add .
$ git commit -am 'リポジトリhoge-repoとユーザーUSER2, USER3を追加'
$ git push
プッシュしたら早速新しく作成されたリポジトリを使ってみましょう。
といってもリポジトリが空なのでリポジトリを作って最初のコミットをしましょう。
$ mkdir hoge-repo
$ cd hoge-repo
$ touch README
$ git init
$ git add README
$ git commit -am 'initial commit'
$ git remote add origin git@YOURDOMAIN:hoge-repo.git
$ git push origin master
最初のコミットだけちょっと特別です。
$ git remote add origin git@YOURDOMAIN:hoge-repo.git
$ git push origin master
上の部分は作ったリポジトリをどこのリポジトリにプッシュするのかの定義です。
では、早速サーバーにあるリポジトリをクローンしてみます。
$ git clone git@YOURDOMAIN:hoge-repo.git
READMEに一言追加して見ます。
$ cd hoge-repo
$ echo "Hello world!" > README
$ git add .
$ git commit -am 'edit README'
次のプッシュは簡単になっています。
$ git push
まとめ
以上でGitのインストールからGitosisでの運用まで駆け足に説明していました。
SSHについてやドメインのセットアップなど色々端折っているところもあるので補完してあげてください。
GitosisはGitのhookなどをうまく使った仕組みらしいですよ。Gitは奥深いですね。
これでとりあえずGitが自由に触れるようになってきたので、使いこなしたいところです。
長くなりましたが最後までありがとうございました。