20 Nov 2014, 23:03

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

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 

関連する記事はこちら
  • Packerやる前にKickstartはじめよう (2015/07/31)
  • Ansibleで最新のMySQLをインストールする。MySQL-shared-compatの役割。 (2015/04/15)
  • SSHエージェントフォワード後に他のユーザでgit cloneする(鍵を使う)ことに関する考察 (2015/04/05)
  • Ruby, thin(bundler利用)を使った環境でのアプリの自動起動設定 (2015/02/22)
  • xinetdを使ってLinux上のサービスを常時起動せずに利用する (2015/01/02)
  • comments powered by Disqus
    このエントリーをはてなブックマークに追加