<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>さくらたんどっとびーず &#187; git</title>
	<atom:link href="http://sakuratan.biz/archives/category/git/feed" rel="self" type="application/rss+xml" />
	<link>http://sakuratan.biz</link>
	<description>モロモロ工事中です</description>
	<lastBuildDate>Sun, 25 Jun 2023 12:51:51 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>ローカルに github みたいのを作りたい</title>
		<link>http://sakuratan.biz/archives/1425</link>
		<comments>http://sakuratan.biz/archives/1425#comments</comments>
		<pubDate>Tue, 08 Dec 2009 00:30:19 +0000</pubDate>
		<dc:creator>さくら</dc:creator>
				<category><![CDATA[git]]></category>

		<guid isPermaLink="false">http://sakuratan.biz/?p=1425</guid>
		<description><![CDATA[さくらです！こばこばゆー☆ 前の記事に引き続き git ネタということで。 git に慣れてくると、色んなところにリポジトリを作っちゃったりしませんか？ポックンはもうどこに何個リポジトリ作ったのか把握できなくなっちゃってますw git の良さは色々ありますが、一番は超簡単にリポジトリを作れるところだと思います。でも作って放ったらかしたリポジトリの場所自体を忘れちゃったりすることがあるのはちと困りも... <div style="margin-top:1ex"><a href="http://sakuratan.biz/archives/1425">(続きを読む)</a></div>]]></description>
			<content:encoded><![CDATA[<p>さくらです！こばこばゆー☆</p>
<p><a href="http://sakuratan.biz/archives/1424">前の記事</a>に引き続き git ネタということで。</p>
<p>git に慣れてくると、色んなところにリポジトリを作っちゃったりしませんか？ポックンはもうどこに何個リポジトリ作ったのか把握できなくなっちゃってますw</p>
<p>git の良さは色々ありますが、一番は超簡単にリポジトリを作れるところだと思います。でも作って放ったらかしたリポジトリの場所自体を忘れちゃったりすることがあるのはちと困りものです。何となく使い方間違ってる気もしますがw</p>
<p>いずれにしてもローカルに CVS や SVN のようなマスタリポジトリを用意しておくと、どこにソースあるのか忘れたーという事態を防げますので大変よろしいんじゃないかと思います。ただ git-daemon を立ち上げるのはちと面倒な気がしたもので、ファイルベースでなんとかできないかと試してみました。以下そのφ（．．）ﾒﾓﾒﾓです。</p>
<h3>git 用のユーザーを作る</h3>
<p>git のローカルマスタリポジトリを作る前に、git 用のユーザーとグループを作っといた方が色々便利だと思います。何が便利かいまいちよく分かんない部分もありますけど、こういうときはユーザーとグループ作るのが定石ってことでw</p>
<p>とりあえず git ユーザーと git グループを adduser とかで作った前提で続けます。また以下の説明ではマスタリポジトリをすべて /git 以下に作ることにしています。/git は git ユーザーのホームディレクトリにします。また、このディレクトリには git グループの書き込み権限を与えます。git を利用するユーザーには git グループを付与します。</p>
<p>ここまでをコマンドでまとめるとだいたいこんな感じです。あくまでもだいたいなので、コピペして実行しない方が良いと思います。</p>
<pre>
# groupadd git
# useradd -d /git -g git -s /sbin/nologin git
# mkdir /home/git
# chown git:git /home/git
# chmod g+w /home/git
# ln -s /home/git /git
</pre>
<h3>マスタリポジトリ初期化用のスクリプトを作る</h3>
<p>/git/test.git に共有するためのリポジトリを作る場合はこうなります。</p>
<pre>
$ env GIT_DIR=/git/test.git git init --bare --shared=group
$ echo 'test repository' > /git/test.git/description
</pre>
<p>git init に &#8211;bare を指定すると裸<strike>いやん</strike>のリポジトリが作成されます。普段 git を使ってるとできる .git の中身だけが /git/test.git に作成されます。</p>
<p>description ファイルを更新しとかないと後で git push する際にエラーが出ますのでご注意を。</p>
<p>そんなややこしいことはしてないのでスクリプト作る必要があるのか微妙なところですが、コマンド一発で作れるようにしとく方が便利ですのでこのようなのを作ってみました。</p>
<pre>
#!/bin/sh

LANG=C; export LANG

PROGNAME=${0##*/}
BASEDIR=~git

err ()
{
	echo "$PROGNAME: $@" 1>&#038;2
	exit 1
}

usage ()
{
	echo "Usage: $PROGNAME REPOS"
	exit 1
}

while getopts 'hm:' ch; do
	case $ch in
	m)	description=$OPTARG;;
	h)	usage;;
	\?)	exit 1;;
	esac
done

if [ -n "$1" ]; then
	case "$1" in
	*[./]*)
		err "Invalid repository name";;
	esac
	GIT_DIR="$BASEDIR/$1.git"
else
	if [ -z "$GIT_DIR" ]; then
		err "Missing GIT_DIR"
	fi
fi

if [ -d "$GIT_DIR" ]; then
	err "$GIT_DIR already exists"
fi

if [ -z "$description" ]; then
	description="Git repository ${GIT_DIR##*/} created by $PROGNAME at `date`"
fi

set -e
export GIT_DIR
git init --bare --shared=group
echo "$description" > "$GIT_DIR/description"
</pre>
<p>mkgitrepos スクリプトと命名してます。これを /usr/local/bin とかパスの通った場所に置いて、</p>
<pre>
$ mkgitrepos test
</pre>
<p>と実行すると ~git/test.git に git リポジトリが作成されます。（~git = /git なら /git/test.git が作成されます。）</p>
<p>ダウンロードできるようにこちらに <a href='http://sakuratan.biz/blog/wp-content/uploads/2009/12/mkgitrepos.txt'>mkgitrepos</a> を置いてますのでどぞ。（WordPress のファイルタイプ制限で拡張子 .txt で置いてます。ダウンロードしてから拡張子を消してください。）</p>
<h3>マスタリポジトリを使う</h3>
<p>リポジトリができたら後の使い方は github とほぼ同じです。</p>
<ol>
<li>リポジトリを clone して、
<pre>
$ git clone /git/test.git
$ cd test
</pre>
</li>
<li>クローンのファイルを更新したら、
<pre>
$ echo 'Test project' > README
$ git add README
$ git commit -m 'first commit'
</pre>
</li>
<li>git push してマスタにうｐします。
<pre>
$ git push origin master
</pre>
</li>
</ol>
<p>これでリポジトリの共有ができるようになりました。</p>
<p><img src="http://sakuratan.biz/blog/wp-content/plugins/sakura-icons/icon2.png" width="160" height="160" border="0" style="border:0;float:left" /><br />
乙華麗☆<br clear="left" /></p>
]]></content:encoded>
			<wfw:commentRss>http://sakuratan.biz/archives/1425/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
