2010-08-23T06:40:52の更新内容

softwares/git/index.wiki.txt

current previous
1,111 0,0
+
${smdncms:title,Git}
+
${smdncms:keywords,Git,git-daemon,xinetd}
+
${smdncms:meta,toc-amazonlivelink-keyword,books-jp,Git}
+
バージョン管理システム[[Git:http://git-scm.com/]]のインストール、初期設定、Tipsなど。
+

          
+
-関連するページ
+
--[[softwares/subversion]]
+
-参考
+
--[[Pro Git - Table of Contents:http://progit.org/book/ja/]]
+
--[[Git - SVN Crash Course:http://git-scm.com/course/svn.html]]
+
--[[Gitの基礎練習:http://www.hyuki.com/techinfo/gitinit.html]]
+

          
+
*git-daemon
+
Ubuntu 10.04でgit-daemonをxinetd経由で起動させるための設定方法。 ここではローカルネットワーク内からのアクセスのみを許可する条件で設定を行う。
+

          
+
-参考
+
--[[git-daemon(1):http://www.kernel.org/pub/software/scm/git/docs/git-daemon.html]]
+
--[[Everyday GIT With 20 Commands Or So:http://www.kernel.org/pub/software/scm/git/docs/everyday.html]]
+
--[[gitサーバーをubuntuに構築してgit://からアクセスできるようにする手順メモ - AorBorF:http://d.hatena.ne.jp/amacou/20090113/1231831940]] git-daemon-runを使用する場合の設定方法
+

          
+
**設定
+
まずはgit-coreパッケージをインストールしておく。
+
#code(sh){{
+
sudo apt-get install git-core
+
}}
+

          
+
まずはsvnserveを動作させるためのユーザ(ここではgitとする)を作成する。
+
#code(sh){{
+
sudo useradd git
+
}}
+

          
+
続いてリポジトリを格納するルートディレクトリ(ここでは/srv/git)を作成する。 git-daemonが書き込めるようにオーナをgitにしておく。
+
#code(sh){{
+
sudo mkdir /srv/git
+
sudo chown -R git:git /srv/git
+
}}
+

          
+
/etc/servicesにgitのサービス名と使用ポート番号が記述されていることを確認する(もしなければ追記する)。
+
#prompt{{
+
$ grep Git /etc/services 
+
git		9418/tcp			# Git Version Control System
+
}}
+

          
+
/etc/hosts.allowに下記の内容を追記し、内部ネットワークからの接続のみを許可する。
+
#code(,/etc/hosts.allow){{
+
git-daemon : 127.0.0.1 192.168.0.0/24
+
}}
+

          
+
また、iptablesなどを使ってファイヤーウォールの設定がされている場合は、9418番のポート(/etc/servicesで指定したポート)を忘れずに空けておくこと。
+

          
+
続いて、xinetdでgit-daemonを起動するための設定を行う。 /etc/xinetd.d配下にgit-daemonというファイルを作成し、下記の内容を書き込む。
+
#code(,/etc/xinetd.d/git-daemon){{
+
service git
+
{
+
        disable         = no
+
        type            = UNLISTED
+
        port            = 9418
+
        socket_type     = stream
+
        wait            = no
+
        user            = git
+
        server          = /usr/lib/git-core/git-daemon
+
        server_args     = --inetd --export-all --enable=receive-pack --base-path=/srv/git
+
        log_on_failure  += USERID
+
        only_from       = 192.168.0.0/24 127.0.0.1
+
}
+
}}
+
設定項目の意味は次の通り。
+
:user|git-daemonを実行するユーザ
+
:server|git-daemonへのフルパス
+
:server_args|git-daemonに渡す引数
+
::--base-path=/srv/git|リポジトリのルートディレクトリを/srv/gitに設定
+
::--enable=receive-pack|認証なしでpushできるようにする(xinetd経由で動作させた場合は認証機構がないため)
+
:log_on_failure|接続に失敗した場合、ユーザ名をログに記録する
+

          
+
起動設定が整ったところで、xinetdの設定を再読み込みする。
+
#code(sh){{
+
sudo service xinetd reload
+
}}
+

          
+
**公開用のリポジトリの作成
+
sandboxというリポジトリを/srv/gitに作成する場合の例。 まずは適当な場所でローカルリポジトリを作成、コミットする。
+
#code(sh){{
+
mkdir temp
+
cd temp/
+
git init
+
touch README
+
git add README
+
git commit -m "initial commit"
+
}}
+

          
+
~--bareオプションを付けて公開用のリポジトリを作成する。 (リポジトリのオーナgitで実行するか、chown -Rしてオーナを変更するのを忘れないこと)
+
#code(sh){{
+
sudo -u git -s
+
git clone --bare temp/ /srv/git/sandbox.git
+
exit
+
}}
+

          
+
作成したローカルリポジトリは不要になるので削除する。
+
#code(sh){{
+
rm -rf temp/
+
}}
+

          
+
git cloneで公開用リポジトリを複製できるかどうか試す。
+
#prompt{{
+
$ git clone git://localhost/sandbox.git
+
Initialized empty Git repository in /home/smdn/sandbox/.git/
+
remote: Counting objects: 3, done.
+
remote: Total 3 (delta 0), reused 0 (delta 0)
+
Receiving objects: 100% (3/3), done.
+
}}
+