--shared = groupで作成されたさまざまな理由から、ファイルパスを介して共有gitリポジトリにアクセスしています。
さまざまなUNIXグループがありますが、すべてが共通のグループを共有しています。 gitリポジトリでchgrp -Rを実行すると、誰でもそれを読み取ることができますが、誰かが書き込みを行うと、共通のグループを使用しない新しいファイルが作成されます。
この問題は、プライマリグループが共有グループではなく、newgrpを実行した場合、すべてが正常に機能しているためと考えられます。
ただし、このアプローチには問題があります。 newgrpは遅く、新しいシェルを生成します。これにより、.bash_profileでそれを呼び出すことは悪い考えだと思います。使用する新しいファイルall共通のグループ。 gitの作業を行う前にメモリを使用して実行することも、惨事のレシピのようです。
だから...何か提案はありますか?
グループにも setgidビット を設定する必要があります。
chgrp -R GROUP /path/to/repo find/path/to/repo -type d -print0 | xargs -0 chmod g + s
--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 *
これは裸のリポジトリですか?それが裸のリポジトリであり、作成時に--sharedを使用した場合、これは発生していないはずなので、私が尋ねています。
ベアリポジトリの場合、ディレクトリの一部がg-sに変更されている可能性があります。これが発生した場合は、chmod g+x
すべてのディレクトリのみ。どのファイルにも実行しないようにしてください。それよりも簡単な方法は、git init --bare --shared=group
新しいリポジトリと、コンテンツをsomebodiesクローンからプッシュして戻します。
上記の回答の組み合わせを使用する必要がありました。
git config core.sharedRepository group
chgrp -R GROUP /path/to/repo
find /path/to/repo -type d -exec chmod g+rwxs {} \;
ベアリポジトリにshared=group
フラグが設定されると、残りはgitが処理するため、以下の作業は1回だけ実行する必要があります。また、setgid
は、この用途では非推奨です。ここにコピー/貼り付け serverfaultからの私の回答 :
repogroup
がグループで、repoディレクトリにcd
があると仮定します。
最初に共有フラグをgroup
に変更します。
git config core.sharedRepository group
注:ここでは、グループ名ではなく、キーワードgroup
を使用する必要があります。これは、オプション--shared=group
を使用してベアリポジトリを作成するのと同じです。
次に、リポジトリ全体のグループを変更します。
chgrp -R repogroup .
既存のディレクトリがグループ書き込み可能(g+w
)であり、既存の実行可能ファイルもグループ実行可能(g+X
)になることを確認するには、次の操作も必要です。
chmod -R g+wX .
これを実行すると、gitはshared=group
フラグを尊重し、既存のファイルと新しいファイルの両方について、以下のグループ権限を処理します。そのため、umask
またはchgrp
に再度アクセスする必要はありません。
見つかった場合は、コメントにソースを追加します。