一部のユーザーがソース コードの特定の部分を表示し、他のユーザーがそのすべてを表示できるように、git リポジトリをどのように設定しますか? 特定のユーザーにのみコミット アクセス権を付与するための多くのガイドを見てきましたが、これらは全員が読み取りアクセス権を持っている必要があることを前提としています。gitosis についても聞いたことがありますが、これがサポートされているかどうかはわかりませんし、1 年以上コミットされていないので、死んでいると思います。
5 に答える
つまり、できません。Git はスナップショット ベースの (少なくとも概念レベルでは) バージョン管理システムであり、変更セット ベースのバージョン管理システムではありません。プロジェクト (リポジトリ)を全体として扱います。履歴はプロジェクトの履歴であり、単一ファイルの履歴の結合ではありません (ファイルごとの履歴の結合以上のものです)。
update-paranoid
contrib のフックやのVREFメカニズムなどのフックを使用してgitolite
、リポジトリへのアクセスを許可または禁止したり、個々のブランチへのアクセスを許可または禁止したりできます。指定したサブディレクトリ内のものを変更するコミットを禁止することもできます。しかし、プロジェクトは常に全体として扱われます。
アクセスを制限したいディレクトリをsubmoduleに作成し、このサブモジュール リポジトリへのアクセスを制限します。
ネイティブの git プロトコルはこれをサポートしていません。git は多くの場所で、誰もがすべての履歴の完全なコピーを持っていると想定しています。
とはいえ、1 つのオプションは、git-subtreeを使用してリポジトリの一部を独自のサブセット リポジトリに分割し、定期的にマージして戻すことです。
Git は、リポジトリでのアクセス制御をサポートしていません。ただし、フック、より具体的にはフックを使用して、自分でリポジトリにアクセス制御を実装できます。update
Jörg は、これを行うためにフックを使用できることをすでに指摘しています。必要なフックは、セットアップによって異なります。プッシュされるレポのアクセス許可が必要な場合は、update
彼が言ったようにフックが必要です。ただし、実際に作業しているレポ上にある場合 (コミットおよびマージ)、pre-commit
およびpost-merge
フックも必要です。githooksのマンページ(Jörg もこれにリンクしています) は、実際には、これを行う方法を示すスクリプトが contrib セクションにあることを示しています。これは、git tarball を取得するか、git の gitweb リポジトリ ( setgitperms.perl ) から取得することで取得できます。更新フックのみを使用している場合でも、それは有用なモデルになる可能性があります。