Gitoliteはアクセス制御やユーザー管理の仕組みを提供してくれます。
今回はCentOSにGitoliteを導入してみたいと思います。
他のディストリビューションでもだいたい同じようにできると思います。
前提条件
- SSHの設定が終わっていること
Gitoliteをインストールする
Gitolite用のユーザーを作成する
$ sudo useradd git $ sudo passwd git
追加したユーザーでSSH接続できるようにする
# /etc/ssh/sshd_config AllowUsers hoge git
SSHを再起動
$ sudo /etc/init.d/sshd restart
ローカルPCで公開鍵と秘密鍵を作成してサーバーに送る
- ここではパスフレーズなしにする
[local]$ cd ~/.ssh [local]$ ssh-keygen -t rsa -f git-admin [local]$ 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
インストールする。
[git]$ mkdir ~/tmp;cd ~/tmp [git]$ git clone git://github.com/sitaramc/gitolite [git]$ mkdir -p ~/bin [git]$ gitolite/install -to ~/bin [git]$ ~/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
不要なファイルを削除する
[git]$ rm -rf ~/tmp [git]$ rm -rf ~/git-admin.pub
authorized_keysを確認する
# ~/.ssh/authorized_keys # gitolite start .... # gitolite end
「# gitolite start」の前に何も書かれていないことを確認する。
記載があるとログインに失敗するみたい。
gitユーザーでsshログインなどしていた場合は入っている。
ローカルからGitoliteへの接続
# ~/.ssh/config Host git-admin.example.com HostName [ホスト名] User git Port [ポート番号] IdentityFile ~/.ssh/git-admin
Gitoliteをローカルにクローンする
[local]$ cd [local]$ git clone git-admin.example.com:gitolite-admin
Gitoliteにユーザーを追加する
- コピー元の鍵は適宜変更してください。ここでは自分自身を追加するようにしています。
[local]$ cd ~/gitolite-admin [local]$ cp ~/.ssh/id_rsa.pub ./keydir/[追加するユーザー名].pub
# ~/gitolite-admin/conf/gitolite.conf repo gitolite-admin RW+ = git-admin RW+ = [追加するユーザー名]
[local]$ git add . [local]$ git commit -m "add user: [追加するユーザー名]" [local]$ git push origin master
GItへの接続情報を設定する
# ~/.ssh/config Host git.example.com HostName [ホスト名] User git Port [ポート番号] IdentityFile ~/.ssh/id_rsa # 省略可能
testingリポジトリをクローンしてみる
$ git clone git.example.com:testing
プロジェクトをGitで管理する
プロジェクトを追加する
# ~/gitolite-admin/conf/gitolite.conf repo my-project RW+ = git-admin
変更したファイルをサーバーへ送る
[local]$ git commit -am "add repo: my-project" [local]$ git push origin master
プロジェクトを初期化してリモートリポジトリに追加する
[local]$ cd existing-project [local]$ git init [local]$ git remote add origin git.example.com:existing-project [local]$ git add . [local]$ git commit -m "first commit" [local]$ git push origin master