【Linux】 CentOSにGitolite を導入する

【2014-06-20】書き直しました。

http://kzy52.com/entry/2014/06/20/085203




GitoliteをつかってGitリポジトリを権限管理したいと思います。

前提条件

・SSHの設定が終わっていること
CentOS でWebサーバー構築」の記事を参考に

Gitoliteをインストールする

・Gitolite用のユーザーを作成する

$ sudo useradd git

・追加したユーザーでSSH接続できるようにする

$ sudo vi /etc/ssh/sshd_config

AllowUsers git

・SSHを再起動

$ sudo /etc/init.d/sshd restart

・ローカルPCで公開鍵と秘密鍵を作成する

[local]$ cd ~/.ssh
[local]$ ssh-keygen -t rsa -f git-admin

※ パスフレーズなし

・公開鍵をサーバーに送る

$ scp -P [ポート番号] ~/.ssh/git-admin.pub [ユーザー名]@[ホスト名]:~/

・サーバーで公開鍵を/home/git に移動して所有権をgitユーザーに変更する

$ sudo mv ~/git-admin.pub /home/git/git-admin.pub
$ sudo chown git:git /home/git/git-admin.pub

・ここからはgitユーザーで作業する

$ sudo su - git

・Gitoliteをインストールする。

$ mkdir ~/tmp;cd ~/tmp
$ git clone git://github.com/sitaramc/gitolite
$ mkdir -p ~/bin
$ gitolite/install -to ~/bin
$ ~/bin/gitolite setup -pk ~/git-admin.pub

・こんなエラーが出る場合

Can't locate Time/HiRes.pm in @INC (@INC contains: /home/git/tmp/gitolite/src/lib /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at /home/git/tmp/gitolite/src/lib/Gitolite/Common.pm line 76.
BEGIN failed--compilation aborted at /home/git/tmp/gitolite/src/lib/Gitolite/Common.pm line 76.
Compilation failed in require at gitolite/install line 15.
BEGIN failed--compilation aborted at gitolite/install line 15.
$ sudo yum install perl-Time-HiRes -y

・不要なファイルを削除する

$ rm -rf ~/tmp
$ rm -rf ~/git-admin.pub

・ローカルからGitolite経由でアクセスができるようにする

$ vim ~/.ssh/config

Host git-admin.example.com
     HostName [ホスト名]
     User git
     Port [ポート番号]
     IdentityFile ~/.ssh/git-admin

・ローカルPCでファイルをクローンしてみる

$ cd
$ git clone git-admin.example.com:gitolite-admin

・Gitoliteにユーザーを追加する

$ cd ~/gitolite-admin
$ cp ~/.ssh/id_rsa.pub ./keydir/[追加するユーザー名].pub
$ vim conf/gitolite.conf

repo testing
    RW+     =   [追加するユーザー名]
$ git add .
$ git commit -m "add user: [追加するユーザー名]"
$ git push

・リポジトリを作成する

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

repo     my-project
     RW+     =     git-admin

・変更したファイルをサーバーへ送る

$ git commit -am "add repo: my-project"
$ git push