リポジトリを後から共有できるようにする。
はじめに
リポジトリを共有モードにするのを忘れていてトラブったので、解決した際の方法を紹介します。
今回は、 ssh経由でアクセスことが前提です。
http/https を利用する場合は別途手順がありますので、機会があれば後日紹介します。
解決方法
まず、 Git リポジトリをチームで共有する際には、 --shared オプションを付与し、リポジトリを初期化します。次に、チームのメンバーの umask を 002 もしくは 007 に変更します。
手順さえ間違えなければ、リポジトリの共有は簡単です。
--shared を忘れた場合はどうなるのかというと、正しく共有できる状態となっていないため、Permission denied が発生します。
この状態は、次の手順で解消できます。
$ cd /your/git/repository $ git config core.sharedRepository group $ chmod -R g+ws hooks $ chmod -R g+ws info $ chmod -R g+ws objects $ chmod -R g+ws refs
一連の手順の説明をしていくと、
git config core.sharedRepository group
で、 config ファイルに、リポジトリの共有設定を追加しています。
chmod では、各ディレクトリのアクセス権を変更しています。
--shared 付きで初期化されたリポジトリは、ディレクトリにグループからの書き込みとスティッキービットが付与されています。
-
- shared なし
$ git init --bare test.git $ ls -l test.git -rw-r--r-- 1 kuma8 staff 23 1 15 22:42 HEAD -rw-r--r-- 1 kuma8 staff 66 1 15 22:42 config -rw-r--r-- 1 kuma8 staff 73 1 15 22:42 description drwxr-xr-x 2 kuma8 staff 408 1 15 22:42 hooks drwxr-xr-x 2 kuma8 staff 102 1 15 22:42 info drwxr-xr-x 4 kuma8 staff 136 1 15 22:42 objects drwxr-xr-x 4 kuma8 staff 136 1 15 22:42 refs
-
- shared あり
$ git init --bare --shared $ ls -l test.git -rw-rw-r-- 1 kuma8 staff 23 1 15 22:43 HEAD -rw-rw-r-- 1 kuma8 staff 126 1 15 22:43 config -rw-rw-r-- 1 kuma8 staff 73 1 15 22:43 description drwxrwsr-x 2 kuma8 staff 408 1 15 22:43 hooks drwxrwsr-x 2 kuma8 staff 102 1 15 22:43 info drwxrwsr-x 4 kuma8 staff 136 1 15 22:43 objects drwxrwsr-x 4 kuma8 staff 136 1 15 22:43 refs
chmod を利用して、--shared と同じ状態にしています。