22

How do you set up a git repository where some users can see certain parts of the source code and other users can see all of it? I've seen lots of guides for only giving certain users commit access, but these assume everyone should have read access. I've also heard of gitosis, but I'm not sure it supports this and it hasn't had any commits in over a year so I think it's dead.

4

5 回答 5

13

简而言之:你不能。Git 是基于快照(至少在概念层面)的版本控制系统,而不是基于变更集的版本控制系统。它将项目(存储库)视为一个整体。历史是一个项目的历史,而不是单个文件历史的联合(它不仅仅是每个文件历史的连接)。

使用update-paranoidcontrib 中的 hook 或VREFs机制等钩子gitolite,您可以允许或禁止访问存储库,您可以允许或禁止访问单个分支。您甚至可以禁止任何更改指定子目录中的内容的提交。但该项目始终被视为一个整体。

好吧,您可以做一件事:将要限制访问的目录创建到submodule中,并限制对此子模块存储库的访问。

于 2009-07-28T21:45:15.643 回答
3

The native git protocol doesn't support this; git assumes in many places that everybody has a complete copy of all of the history.

That said, one option may be to use git-subtree to split off part of the repository into its own subset repository, and periodically merge back.

于 2009-07-28T19:49:15.253 回答
3

Git 不支持对存储库的访问控制。但是,您可以自己实现对存储库的访问控制,方法是使用钩子,更具体地说是update钩子。

于 2009-07-28T21:44:32.570 回答
2

Jörg 已经指出您可以使用钩子来执行此操作。您需要的具体挂钩取决于您的设置。如果你想要一个被推送到的仓库的权限,你需要update像他说的那样使用钩子。但是,如果它在您实际工作的存储库中(提交和合并),您还需要pre-commitandpost-merge钩子。githooks手册页(Jörg 也与此链接)指出,实际上 contrib 部分中有一个脚本演示了一种方法。你可以通过获取一个 git tarball 来获得它,或者将它从 git 的 gitweb 存储库中拉出来:setgitperms.perl。即使您只使用更新挂钩,这也可能是一个有用的模型。

于 2009-07-29T13:57:03.940 回答
1

一般来说,Git 不适合这个。到目前为止,它似乎只有存储库级别的开箱即用访问控制。

但是,如果您只需要在 Git 存储库中隐藏部分机密信息(通常是这种情况),您可以使用 git-crypt ( https://github.com/AGWA/git-crypt ) 和基于共享的加密密钥用户 GPG 密钥 ( https://gnupg.org/ )。

或者,如果您可以将代码库分解为逻辑部分,则可以使用 git 子模块(https://git-scm.com/book/en/v2/Git-Tools-Submodules )。然后所有用户只能访问某些存储库,然后您通过子模块将其集成到“大型”代码库中,您可以在其中添加其他代码并只允许“特权”用户使用。

于 2020-07-01T06:57:03.080 回答