読者です 読者をやめる 読者になる 読者になる

Goldstine研究所

mosuke5's tech blog

後からGitレポジトリを共有設定に。sharedオプションの仕組みについて

git Linux

Gitレポジトリを作って、複数人で開発をしていた。
しかし、レポジトリの中に作成されるファイルやディレクトリが個人のグループになってしまい、
Push, PullするときにPermission errorで怒られまくる。

ユーザには共通のグループを作っていたのに…なんでだっけ…

気づけばレポジトリを作るとき以下のようにしていた。

$ git init --bare

複数人で共有するときには以下のようにするべきであった。

$ git init --bare --shared

では、そもそもgitのsharedオプションをつけると何が裏で起こっているのか。
調べると「setgid」というキーワードに辿り着いた。
setgidの権限を付けておくと、そのディレクトリに作成されたファイルの所有グループは、そのディレクトリの所有グループになる。

以下のようにchmodでsetgidを付けることができる。

$ chmod g+s dir_name

setgidがつくとあまり馴染みのない権限がつく。
「drwxrwsr-x」

$ ls -l 
drwxrwsr-x  4 user  group  136 11 16 22:49 test_dir

そして、すでに共有設定なしで作ってしまったレポジトリでは以下のように対応可能。
(新しくレポジトリつくるのはめんどいので…)

##Gigレポジトリ内のディレクトリに
$ chmod -R g+s ./branches
$ chmod -R g+s ./hooks
$ chmod -R g+s ./info
$ chmod -R g+s ./objects
$ chmod -R g+s ./refs
$ vim .git/config
  ##[core内に]以下を付け加えておいた
  [core]
       repositoryformatversion = 0