やりたいこと
Ubuntu 12.04 LTS上にGitの共用リポジトリを作成して、gitwebをWebUIとして入れて複数人でプライベートで共同開発したい。
Gitのリモートリポジトリの作成
Gitのインストール
Gitのインストールは単純に[ubuntu@remote] $sudo apt-get install git
でOK!
リモートリポジトリ作成
まずgitユーザーを作成してグループの設定をする。次にリモートリポジトリ作成を作成する。[ubuntu@remote] $sudo adduser git $sudo usermod -a -G git zuqqhi2 $sudo usermod -a -G git test $sudo su - git [git@remote] $vim ~/.bashrc umask 002
その次は、自分のユーザで中身の作成と登録。[git@remote] $mkdir -p /home/git/repositories/test.git $cd /home/git/repositories/test.git $git --bare init --shared=group
これで中身も出来たから、後は他のユーザでチェックする。[zuqqhi2@remote] $mkdir ~/test $cd ~/test $git init $echo "Hello git project" > README $git add . $git commit -m "first push" $git push /home/git/repositories/test.git master
[test@remote] $git clone /home/git/repositories/test.git $cd test $vim README update $git commit -m "update test" -a $git push /home/git/repositories/test.git master [zuqqhi2@remote] $cd ~/test $git pull
これでリポジトリは出来た!
nginxでHTTPアクセスできるようにする
今度はローカルからHTTPでcloneとpushを出来るようにする。nginxとfcgiwrapをインストール
fcgiwrapでgitを動かすためにインストールする。これも単純にapt-getでOK!
[ubuntu@remote] $sudo apt-get install nginx fcgiwrap
configの設定
nginxのコンフィグとあと細かい設定を行う。[ubuntu@remote] $sudo mv /etc/nginx/sites-enabled/default /etc/nginx/sites-available/default $sudo vim /etc/nginx/sites-available/git server { listen 80 default_server; listen [::]:80 default_server ipv6only=on; root /home/git; index index.html index.htm; access_log /home/git/logs/access.log; error_log /home/git/logs/error.log; # Make site accessible from http://localhost/ server_name git.example.com; location /repositories { auth_basic "Restricted"; auth_basic_user_file /etc/nginx/htpasswds/git; include /etc/nginx/fcgi_params; fastcgi_param SCRIPT_FILENAME /usr/lib/git-core/git-http-backend; fastcgi_param GIT_PROJECT_ROOT /home/git; fastcgi_param GIT_HTTP_EXPORT_ALL ""; fastcgi_param PATH_INFO $uri; fastcgi_param REMOTE_USER $remote_user; fastcgi_pass unix:/var/run/fcgiwrap.socket; } error_page 404 /404.html; error_page 500 502 503 504 /50x.html; } $sudo cp /etc/nginx/sites-available/git /etc/nginx/sites-enabled/git $sudo vim /etc/nginx/htpasswds/git test:vtDa1cB7mCB3Q $sudo usermod -a -G git www-data $sudo su - git [git@remote] $mkdir /home/git/logs $cd /home/git/repositories/test.git $cp hooks/post-update.sample hooks/post-update $git update-server-info $git config http.receivepack true $exit [ubuntu@remote] $sudo /etc/init.d/fcgiwrap stop $sudo /etc/init.d/fcgiwrap start $sudo /etc/init.d/nginx stop $sudo /etc/init.d/nginx start
最後の方でhookの設定もしてる。
これでpushするとHEADが最新のになって、cloneでも最新のソースが得られる。 また、www-data(fcgiwrapの実行ユーザ)をgitに追加している。
これをしないとpushがunpack errorが起きてできない。
確認
設定完了したから後はローカルからcloneとpushが出来るか確認する。[zuqqhi2@local] $git clone http://git.example.com/repositories/test.git $cd test $vim README push from local $git commit -m "first push from local" -a $git push origin master
OK!うまく行った!
gitweb
最後はgitwebをインストールするだけだ。gitwebのインストール
apt-get installで大丈夫。[ubuntu@remote] $sudo apt-get install gitweb
gitweb.confの設定
gitwebの設定をする。[ubuntu@remote] $sudo vim /etc/gitweb.conf # path to git projects (<project>.git) $projectroot = "/home/git/repositories"; # directory to use for temp files $git_temp = "/tmp"; # target of the home link on top of all pages #$home_link = $my_uri || "/"; # html text to include at home page #$home_text = "indextext.html"; # file with project list; by default, simply scan the projectroot dir. #$projects_list = $projectroot; # stylesheet to use @stylesheets = ("static/gitweb.css"); # javascript code for gitweb $javascript = "static/gitweb.js"; # logo to use $logo = "static/git-logo.png"; # the 'favicon' $favicon = "static/git-favicon.png"; # git-diff-tree(1) options to use for generated patches #@diff_opts = ("-M"); @diff_opts = ();
nginxの設定
gitweb.cgi用のnginx設定をする。[ubuntu@remote] $sudo vim /etc/nginx/sites-available/git server { listen 80 default_server; listen [::]:80 default_server ipv6only=on; root /home/git; index index.html index.htm; access_log /home/git/logs/access.log; error_log /home/git/logs/error.log; # Make site accessible from http://localhost/ server_name git.example.com; location /repositories { auth_basic "Restricted"; auth_basic_user_file /etc/nginx/htpasswds/git; include /etc/nginx/fcgi_params; fastcgi_param SCRIPT_FILENAME /usr/lib/git-core/git-http-backend; fastcgi_param GIT_PROJECT_ROOT /home/git; fastcgi_param GIT_HTTP_EXPORT_ALL ""; fastcgi_param PATH_INFO $uri; fastcgi_param REMOTE_USER $remote_user; fastcgi_pass unix:/var/run/fcgiwrap.socket; } location /gitweb { auth_basic "Restricted"; auth_basic_user_file /etc/nginx/htpasswds/git; index index.cgi; include /etc/nginx/fcgi_params; gzip off; if ($uri ~ "/gitweb/index.cgi") { fastcgi_pass unix:/var/run/fcgiwrap.socket; } } error_page 404 /404.html; error_page 500 502 503 504 /50x.html; }
確認
完成!!
リファレンス
- git remote repository : http://taichino.com/memo/1587
- gitweb : http://www.frlinux.eu/?p=135