2008年11月13日木曜日

gitのある生活(2)

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
今日は、myserverにgit pushするための設定です。
client, serverはともにLANにあるものとします。つまり認証なしのケースです。

この例での作業フローはoriginでclone/fetchをcrontabで行っています。それをbranch masterにpullしてきてローカルでマージし、こんどそれをlocalのbackgammonbaseにmergeします。最後にmergeしたbackgammonbaseをworkにpushします。

client側の設定です。まあ、branchごとに対応するremoteを設定できることがよいところでしょう。masterをcheckoutしてgit pullと打てば、git.tonic-water.comからとってきますし、backgammonbaseをcheckoutしてgit pushと打てばwork.tonic-water.comにpushされます。

[remote "origin"]
url = http://git.tonic-water.com/gnubg-mirror/.git
fetch = +refs/heads/*:refs/remotes/origin/*

[remote "save"]
url = git://work.tonic-water.com/gnubg/.git
fetch = +refs/heads/*:refs/remotes/origin/*

[branch "master"]
remote = origin
merge = refs/heads/master

[branch "backgammonbase"]
remote = save
merge = refs/heads/master


サーバ側の設定
git daemonのためにport9418をあけましょう。
使用したいrepositoryをおくdirを決めましょう。今回は
/usr/local/repos/git/work
におくことにしました。この下に/gnubg, /gnubg/.gitが配置されています。

server.shを用意しましょう。中身はこんな感じです。

#!/bin/sh
git-daemon --verbose --base-path=/usr/local/repos/git/work --reuseaddr --export-all --syslog --detach

manに書いてありますが、reuseaddrはつけておいたほうが無難でしょう。再起動をかけたときにすぐつながるし。--syslog --detachは動くようになってからつけましょう。base-pathはapacheでいうところのDocumentRootですな。--export-allしない場合はdirごとになんかfileをおいてコントロールするらしい(エラーしやすい気がするからあまりよいソリューションとは思えないが・・・)。私は、特定のdirの下を再帰的に特定用途に使うほうが筋がよいとおもっているのでexport-allです。

server.shを適切な権限で実行します。privilege dropしているとは思えないので、普段使うユーザアカウントやrootで実行しないようにしましょう。念のため。

gnubg/.gi/configtはこんな感じです。書き加えられているのはdaemonの部分で、どういうことかはmanを参考にしてください。この設定は認証が無いのでセキュアなLANからのみ使用可能にしましょう。私のLANは有線しかないです。

[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[daemon]
uploadpack = true
uploadarch = true
receivepack = true
[remote "origin"]
url = http://git.tonic-water.com/gnubg-mirror/.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master

0 件のコメント: