例:リポジトリがあります-そのようなfs階層を持つrepo1
repo1:
js
html
php/core
php/menu
そして、RW パーミッションをフリーランサーに与えたいのですrepo1:php/menu
が、すべての repo1 に対して、このフリーランサーには読み取り専用パーミッションのみが必要です。
gitolite または gitosis でこれを行うことはできますか、それとも他のものである可能性がありますか?
DVCSのリポジトリアクセス権は、主にすべてのクローンを作成するため、ifの一部ではなく、常にすべてのリポジトリにリンクされます(浅いクローンは難しい)。
つまり、gitolite(廃止されたgitosisについては言及しません)は、以下に制限を設けることができます。
ただし、ユーザーがリポジトリの一部にアクセスするのを防ぐことはできません。
ただし、gitolitev3または'g3'(2012年4月17日)以降、VREFルールを使用して、特定のディレクトリ(特定のブランチに加えて)への書き込み(プッシュ)を防ぐことができます。
元の回答(gitoliteV2または'g2'、2011年11月)
gitolite.conf
-例と補足:参照用の「R」権限を参照してください。
repo gitolite-admin
RW+ = sitaram
# this is equivalent to:
RW+ refs/.* = sitaram
Sitaramが唯一の管理者です。彼は、gitolite-adminリポジトリ内のブランチまたはタグをプッシュ、作成、削除、または巻き戻すことができます。
R master = wally # MEANINGLESS! WILL NOT DO WHAT YOU THINK IT DOES!
これは機能しません。
「読み取り」アクセスは、ブランチレベルではなく、リポジトリレベルでのみ制限できます。
これはgitの問題であり、gitoliteの問題ではありません。それらを気にするか、gerritに切り替えてください。
最初の問題は、gitのコンテキストで「読み取り専用」と「読み取り/書き込み」が何を意味するかです。gitの「書き込み」は、2つの別々の操作で構成されます。ツリー全体にまたがるリビジョンを作成する「コミット」(gitにはファイルごとの履歴がまったくありません)と、そのリビジョンを中央リポジトリにコピーする「プッシュ」。
ユーザーは作業リポジトリにフックを手動でインストールする必要があるため、自分以外の人の「コミット」を制限する方法はありません。したがって、問題のユーザーは、何でも変更するコミットを作成できます。また、パッチを送信したり、バンドルしたり、作業リポジトリから直接プルできるようにすることで、チームの他のメンバーとそのコミットを共有することもできます。
制限できるのは、中央リポジトリへの「プッシュ」です。リビジョンの内容をチェックし、不要なものに触れた場合は拒否するupdate
orフック(呼び出し規約のみが異なります)を作成できます。pre-receive
フックは3つのupdate
引数、ブランチ名、古いコミット、新しいコミットを受け取るので、古いコミットと新しいコミットだけを受け取り、git diff --name-status
指定されたユーザー(gitoliteから取得する方法を調べる必要があります)がプッシュと変更を行っています許可するサブディレクトリ以外に影響を与える場合は、プッシュを拒否します。
ユーザーは、ツリーの他の部分に影響を与えるリビジョンを作成し、他の誰かにプッシュさせることでトランクに取り込むことができます。役に立つかもしれませんが、同僚は、コンサルタントから直接取得した変更を確認する必要があることに注意する必要があります。
作成者は自由に設定できるため、コミット作成者またはコミッターのチェックは安全ではないことに注意してください。
あなたがやりたいことは、ギトライトで可能に思えます。これを見てください:http://sitaramc.github.com/gitolite/bac.html
ただし、読み取りアクセスはレポ レベルでのみ行われますが、とにかくそれが必要です。