さんまがおいしい季節だねー(´・ω・`)

ローカルに github みたいのを作りたい

git — タグ: — さくら @ 2009/12/08 9:30

さくらです!こばこばゆー☆

前の記事に引き続き git ネタということで。

git に慣れてくると、色んなところにリポジトリを作っちゃったりしませんか?ポックンはもうどこに何個リポジトリ作ったのか把握できなくなっちゃってますw

git の良さは色々ありますが、一番は超簡単にリポジトリを作れるところだと思います。でも作って放ったらかしたリポジトリの場所自体を忘れちゃったりすることがあるのはちと困りものです。何となく使い方間違ってる気もしますがw

いずれにしてもローカルに CVS や SVN のようなマスタリポジトリを用意しておくと、どこにソースあるのか忘れたーという事態を防げますので大変よろしいんじゃないかと思います。ただ git-daemon を立ち上げるのはちと面倒な気がしたもので、ファイルベースでなんとかできないかと試してみました。以下そのφ(..)メモメモです。

git 用のユーザーを作る

git のローカルマスタリポジトリを作る前に、git 用のユーザーとグループを作っといた方が色々便利だと思います。何が便利かいまいちよく分かんない部分もありますけど、こういうときはユーザーとグループ作るのが定石ってことでw

とりあえず git ユーザーと git グループを adduser とかで作った前提で続けます。また以下の説明ではマスタリポジトリをすべて /git 以下に作ることにしています。/git は git ユーザーのホームディレクトリにします。また、このディレクトリには git グループの書き込み権限を与えます。git を利用するユーザーには git グループを付与します。

ここまでをコマンドでまとめるとだいたいこんな感じです。あくまでもだいたいなので、コピペして実行しない方が良いと思います。

# 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

マスタリポジトリ初期化用のスクリプトを作る

/git/test.git に共有するためのリポジトリを作る場合はこうなります。

$ env GIT_DIR=/git/test.git git init --bare --shared=group
$ echo 'test repository' > /git/test.git/description

git init に –bare を指定すると裸いやんのリポジトリが作成されます。普段 git を使ってるとできる .git の中身だけが /git/test.git に作成されます。

description ファイルを更新しとかないと後で git push する際にエラーが出ますのでご注意を。

そんなややこしいことはしてないのでスクリプト作る必要があるのか微妙なところですが、コマンド一発で作れるようにしとく方が便利ですのでこのようなのを作ってみました。

#!/bin/sh

LANG=C; export LANG

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

err ()
{
	echo "$PROGNAME: $@" 1>&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"

mkgitrepos スクリプトと命名してます。これを /usr/local/bin とかパスの通った場所に置いて、

$ mkgitrepos test

と実行すると ~git/test.git に git リポジトリが作成されます。(~git = /git なら /git/test.git が作成されます。)

ダウンロードできるようにこちらに mkgitrepos を置いてますのでどぞ。(WordPress のファイルタイプ制限で拡張子 .txt で置いてます。ダウンロードしてから拡張子を消してください。)

マスタリポジトリを使う

リポジトリができたら後の使い方は github とほぼ同じです。

  1. リポジトリを clone して、
    $ git clone /git/test.git
    $ cd test
    
  2. クローンのファイルを更新したら、
    $ echo 'Test project' > README
    $ git add README
    $ git commit -m 'first commit'
    
  3. git push してマスタにうpします。
    $ git push origin master
    

これでリポジトリの共有ができるようになりました。


乙華麗☆

0 Comments »

コメントはまだありません。

この投稿へのコメントの RSS フィード。 TrackBack URI

コメントする

Copyright © 2017 さくらたんどっとびーず | powered by WordPress with Barecity