ローカルに github みたいのを作りたい
さくらです!こばこばゆー☆
前の記事に引き続き 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 とほぼ同じです。
- リポジトリを clone して、
$ git clone /git/test.git $ cd test
- クローンのファイルを更新したら、
$ echo 'Test project' > README $ git add README $ git commit -m 'first commit'
- git push してマスタにうpします。
$ git push origin master
これでリポジトリの共有ができるようになりました。
乙華麗☆