D.

プライベートな git リポジトリを手軽に用意する。

プログラマなら誰しも自分用のプライベートな git リポジトリを持っていることだろう。

いままで自分専用のリポジトリを利用するために github を利用してきた。 github は Web インターフェースを備えており Wiki や Graph などチームで開発をするために有用な機能がある。

しかし githubリポジトリを非公開にするには課金しないといけない。そのためいままで必要に迫られて課金してきたのだが、よく考えると自分専用のサーバー群を格安で持てるこの時代に最低月 7 ドルもリポジトリのためだけにマネーを支払うのはなんとも勿体無い話である。上記のリッチな付加機能も自分一人で利用するならほとんど必要無い。

そこで自分のサーバーに git のリポジトリを用意することにした。セキュアにしたいので通信プロトコルssh を利用することにする。そのやり方をメモしたので公開する。

新しく公開用の git リポジトリを作成する場合。

mkdir -p ~/git-bare/repo # 公開場所はサーバーの ~/git-bare/repo.git とする
cd ~/git-bare/repo
git init # リポジトリを初期化する
touch readme.txt
git add readme.txt
git commit -m "first commit" # 何でも良いからとにかくコミットする
cd ..
git clone --bare repo repo.git # repo リポジトリから公開用の bare リポジトリを生成する

git は空のリポジトリであってはならず、最初に必ず何かをコミットしておく必要がある。
上記の例では readme.txt を初期ファイルとしている。

既存の githubリポジトリから移行する場合。

mkdir -p ~/git-bare
cd ~/git-bare
git clone git@github.com:yourname/repo.git # github からクローンを生成する
git clone --bare repo repo.git # github のクローンからさらに公開用の bare リポジトリを生成する


この時点で ~/git-bare には repo と repo.git というディレクトリが存在する。このうち repo.git が bare リポジトリとなる。これは公開用のものであり repo のファイル自体は含まない。

利用してみる。

ではさっそく他のマシンから上記のリポジトリにアクセスできるか試してみる。ここからはローカルで作業する。

git clone ssh://yourname@hostname/~yourname/git-bare/repo.git

これでローカルにリポジトリの内容を取得できれば成功である。


さらに確認のためローカルで変更をし、それをサーバーのリポジトリに反映してみる。

cd repo
touch hoge.txt
git add hoge.txt
git commit -m "test"
git push

これで無事に push されれば成功である。あとは思う存分コードを書いてコミットしまくれば良い。

万全を期すなら、ローカルのリポジトリを一旦削除し再度 git clone してみて push した内容も含めて取得できることを確認しておこう。