2011-01-28 10 views
25

ファイルパス経由で共有gitリポジトリにアクセスしていますが、ここでは省略して、--shared = groupを使用して作成します。gitリポジトリでグループファイルのアクセス許可を正しく使用するには?

私たちにはさまざまなUNIXグループがありますが、すべて共通のグループを共有しています。 gitリポジトリでchgrp -Rを実行すると、誰でもそれを読むことができますが、誰かがそれに書き込むと、共通グループを使用しない新しいファイルが作成されます。

この問題は、プライマリグループが共有グループではなく、newgrpを実行するとすべてがうまくいくように見えるためです。

このアプローチには問題がありますが、 newgrpが遅く、新しいシェルが生成されるため、.bash_profileで呼び出すと悪い考えになるかもしれません。私たちが望むかどうかを考慮しなくてもすべて新しいファイルが共通グループを使用します。 gitの仕事をする前にそれを実行するメモリに依存することも、災害のためのレシピのように思えます。

だから...任意の提案ですか?

+2

「gitolite」を試してみてください。ただgitユーザが1人必要です。 – takeshin

+6

さらなるソフトウェアのダウンロードは、実際には私たちの選択肢ではありません。 – rich

答えて

21

グループにもsetgid bitを設定する必要があります。

 
chgrp -R GROUP /path/to/repo 
find /path/to/repo -type d -print0 | xargs -0 chmod g+s 
+7

'chmod -R g + s'ではgit repoを実行しないでください。あなたが思ったことだけでなく、すべてのファイルに対してsetgidを有効にしました。 – Arrowmaster

+0

まあ、それが最善のことではないことは事実です。幸いにもそれらのどれも実行可能ではありません。代わりに、代わりにヒットディレクトリのみにポストを更新しました(これは必須です)。 –

+2

もしあなたがfindを使うつもりならば、すべてを行って、ブランチやタグ名にスペースや他の奇妙な文字を使用するのに狂った人から保護するために、-print0を使用してください。 – Arrowmaster

7

これは裸のレポですか?その裸のレポとあなたがそれを作成したときに共有していたら、これは起こってはいけないので、私は頼んでいるのです。

ディレクトリがg-sに変更されている可能性がある場合は、chmod g+xのいずれかのディレクトリにする必要があります。いずれのファイルに対しても実行しないでください。それよりも簡単な方法は、新しいレポをgit init --bare --shared=groupにして、somebodiesクローンからそれにコンテンツを戻すことです。

19

--sharedで作成されていない既存のリポジトリには、次のコマンドを使用して共有回すことができます。

# make the repository shared 
git config core.sharedRepository group # or whatever other sharing option 
# fix the setgid bit 
find . -type d | xargs chmod g+s 
# repair the permissions 
chmod -R g+r * 
+1

私の場合、「chmod -R g + rw *」を実行しなければなりませんでした。そうでなければあなたの答えに感謝します。 –

4

私は上記の回答から組み合わせを使用する必要がありました:

git config core.sharedRepository group 
chgrp -R GROUP /path/to/repo 
find /path/to/repo -type d -exec chmod g+rwxs {} \; 
3

裸たらリポジトリにshared=groupフラグがある場合、gitは残りの部分を処理しますので、以下は一度だけ行う必要があります。また、setgidはこの用途では推奨されません。ここで私は/ my answer from serverfaultをコピー&ペースト:repogroupを想定し

は、あなたのグループであり、あなたはレポディレクトリにcdを持っている:

まずgroupに共有フラグを変更します。

git config core.sharedRepository group 

注:ここであなたをしなければなりませんグループ名ではなくキーワードgroupを使用してください。 これは、オプション--shared=groupでベアリポジトリを作成するのと同じです。その後

リポジトリ全体のためのグループを変更します。

chgrp -R repogroup . 

を既存のディレクトリは、グループ書き込み可能(g+w)、 と既存の実行可能ファイルにもなって、グループ実行ファイル(g+X) あなたにも必要であることを確認するには:これが完了したら

chmod -R g+wX . 

は、gitがshared=groupフラグを尊重し、以下のA、Bにグループ権限の世話をします既存のファイルと新しいファイルの場合は別ですので、再度umaskまたはchgrpにする必要はありません。

私はそれを見つけると、コメントにソースを入れます。

関連する問題