gitリポジトリの公開 web, ssh, git

webでリポジトリがみれて、gitでcloneのみできて、権限を与えたユーザのみsshでpushできる環境の構築。

git + gitolite + git-daemon + gitweb on CentOS 6.3

インストール
git、 git-daemon、 gitwebはyumでインストール
yum install git gitweb git-daemon

gitoliteのインストール

https://github.com/sitaramc/gitoliteのSteps to install部分
ユーザgitでログインする。必要であればuseraddで追加
~/.ssh/authorized_keysが存在しないこと。
ssh公開鍵が$HOME/YourName.pubにあること。ex)/home/git/nori.pub

以下のコマンドを入力
git clone git://github.com/sitaramc/gitolite
mkdir -p $HOME/bin
gitolite/install -to $HOME/bin
$HOME/bin/gitolite setup -pk YourName.pub

これでssh経由でのリポジトリの管理やユーザの管理が可能になります。方法は同ページのADDING USERS AND REPOSをみてください。
新しいリポジトリの作成やユーザの追加、削除、権限編集などの管理は設定用のリポジトリを操作することになります。
gitwebで表示されるdescriptionの設定も同じ設定ファイルを通して行います(後記の~/.gitolite.rcの編集が必要)。

各ツールの設定
gitweb
gitwebのcgiが/home/gitのリポジトリを読みにいくための設定とapacheがリポジトリを見れるようにするための設定。
/var/www/git/gitweb.cgi
/etc/gitweb.conf
our $projectroot = "/home/git/repositories";
our $projects_list = "/home/git/projects.list";

httpdの実行ユーザをグループgitに追加
usermod -a -G git apache

git-daemon
git-daemon用ユーザの追加
ログイン無効。ホームディレクトリは作成しない。apacheと同様リポジトリがみれるようにグループgitに追加。
useradd -M -s /sbin/nologin -g git gitd

/etc/xinetd.d/gitの編集
実行ユーザやオプションの設定とIPv4環境用の設定。
# user = nobody
user = gitd
# server_args = --base-path=/var/lib/git --export-all --user-path=public_git --syslog --inetd --verbose
server_args = --base-path=/home/git/repositories --export-all --syslog --inetd --verbose
flags = IPv4

起動時にデーモンが動いてくれるように設定
chkconfig git on
デーモン起動
service xinetd restart

最後に/home/git/.gitolite.rcの編集

新たに作成されるリポジトリの権限の設定
#UMASK => 0077,
UMASK => 0027,

gitolite-adminリポジトリのgitolite.confにconfig gitweb.descriptionを追加してpushしたときに何かエラーがでるのを出ないようにするようにする設定。
(gitolite-adminリポジトリ経由でどこまでの設定を許可するかの設定。gitolite-admin管理者がサーバのgitアカウントのシェルにアクセスできる状態なら、ここで制限する意味がないので以下のように設定する。)
#GIT_CONFIG_KEYS => '',
GIT_CONFIG_KEYS => '.*',


サーバの設定

/home/git
/home/git/projects.list
/home/git/repositories

はgitグループにrとxのやつ権限あたえておいてください。750です。
あとgit-daemonは専用のtcp9418をつかうのでiptablesで許可が必要です。

追記
https://github.com/sitaramc/gitolite-docがドキュメントの本拠地?
pushするためにはsshでcloneするもしくは、gitでcloneした後にgit remote set-urlなんとかで変更が必要。

ちなみにbitbucketならプライベートリポジトリも無料です。

コメントを残す

メールアドレスが公開されることはありません。