git サーバ on Ubuntu 10.04 LTS 構築メモ

Ubuntu 10.04 LTS上にgitのリポジトリを構築したので、設定メモ


# sudo apt-get install git-core

ローカルリポジトリを生成・コミット


#mkdir test
#cd test
#git init
適当にファイルを生成し、リポジトリに追加して、コミット

# touch testfile
# git add testfile
# git commit -m 'first commit'

リモートリポジトリを生成


#cd /var/git
#mkdir repos/test.git
#cd repos/test.git
#git --bare --shared
bareリポジトリというのが良く分からなかったので、調べてみるとココに詳しく書いてあった。

Gitの公開リポジトリは通常、管理ファイルのみを持つ「bareリポジトリ」として作成される。
通常bareリポジトリでは作業ツリーの変更やコミットといった操作は行わず、
ファイルのやりとりにのみ使用する。
また、慣例としてbareリポジトリとして使用するディレクトリには「.git」という拡張子が付けられる。
bareリポジトリは、「--bare」オプションを付けてでgit initを実行することで作成できる
通常であれば

git init
のみで初期化されるが、複数マシンでリポジトリを共有して作業するといった運用をするならば、--bareと、さらにリポジトリに対するグループ書き込みパーミッションを自動的に追加するために--sharedオプションを付けて git init するといいようだ。
ちなみに--sharedオプションを付けずに、ローカルからpushすると以下のようなエラーが出た。

Counting objects: 4, done.
Writing objects: 100% (4/4), 256 bytes, done.
Total 4 (delta 0), reused 0 (delta 0)
error: insufficient permission for adding an object to repository database ./objects

fatal: failed to write object
error: unpack failed: unpack-objects abnormal exit
To ssh://pidekazu@192.168.100.10/var/git/repos/test.git
! [remote rejected] master -> master (n/a (unpacker error))
error: failed to push some refs to 'ssh://pidekazu@192.168.100.10/var/git/repos/bdlms.git'

生成したディレクトリの所有者とグループの設定

#sudo chown -R repos .
#sudo chgrp -R repos .
以上でサーバ側の設定は終わりです。

ローカルリポジトリをリモートリポジトリへ反映させます。
ローカルマシンから以下を入力


#cd test
#git remote add origin ssh://192.168.100.10/var/git/repos/test.git
#git push origin master
git remote add origin以下で、誤ったURLを設定してしまった場合、

fatal: remote origin already exists.
などと怒られてしまいますので、

# git remote set-url ssh://192.168.100.10/var/git/repos/test.git
を実行することで、URLを変更することができます。

#git remote -v
origin ssh://192.168.100.10/var/git/repos/test.git (fetch)
origin ssh://192.168.100.10/var/git/repos/test.git (push)
正しく変更されました。