分布式版本控制和访问控制

6
有没有一种分布式版本控制系统,能够以子文件夹为粒度级别向用户授予读/写权限?例如,如果我想让UserA访问/foo树,而只让UserB访问/foo/bar,是否可行?
更新:据我了解,Git无法实现上述功能(它只处理整个代码库)。那么Bazaar和Mercurial呢?
更新:仍在寻找更好的答案。

我对分布式版本控制系统不够熟悉,但我猜测如果你明确指定是“读取权限”还是“写入权限”,你会得到更好的答案。 - maxim1000
@maxim1000,我指的是读写访问控制。 - fithu
1
这并不是一个真正的答案,但如果你在分布式版本控制系统中找不到解决方案,你可以尝试提供具有特定读/写访问权限的SVN存储库,并使用各种桥接工具连接到分布式版本控制系统。 - maxim1000
PlasticSCM、Veracity,或者最近的Perforce开发可能能够满足这个需求。 - Phil Miller
3个回答

0

编辑:刚刚查看了评论,原帖作者需要读写权限,因此撤回此答案。

不,Git并非不可能实现。Gitolite项目非常成熟,并且多年来一直提供细粒度的访问权限(仓库/分支/目录/文件级别的权限)。

关于限制对单个文件更改的具体示例可以在这里找到:http://gitolite.com/gitolite/vref.html#NAME

这里有一些简单的示例here,还有更详细的定义规则文档available here

编辑:添加了另一个链接


虽然这是问题的一部分,但是给某人只读访问仅限于 Git 子树库的权限基本上是不可能的。 - Phil Miller
1
@Novelocrat,gitolite 可以做到!请查看此链接。它提供了一个示例,可以特别禁止推送更改到单个文件。 - Subhas
1
这是对推送(写入)的限制,而不是阅读。请阅读原帖作者的评论。 - Phil Miller
啊,是的,没错。抱歉我的失误,但我没有看到那作为问题的一部分。当 OP 说“限制访问”时 - 我不确定它是指“限制读取访问”还是“限制写入访问”。 - Subhas
抱歉,刚刚查看了评论。撤回……感谢您指出这一点! - Subhas

0
可以通过使用SCM-ManagerPath Writeprotect Plugin向Mercurial、Subversion或git添加写保护。您可以定义一个路径以及具有对其进行写访问权限的用户或组。

读取保护对于Git和Mercurial无效,因为它必须始终克隆完整的存储库。您是否可以使用子存储库而不是文件夹来工作? - DaSilva2010
否则,Subversion与Apache结合使用可以通过在Apache配置中设置访问权限来实现您想要的功能。[http://svnbook.red-bean.com/nightly/en/svn.serverconfig.httpd.html#svn.serverconfig.httpd.authz.perdir.ex-3] - DaSilva2010
子仓库重叠太多了... 我更喜欢一些不那么笨拙的东西。 - fithu

0

正如@maxim1000在评论中指出的那样,实现这一目标的最佳方法可能是运行一个Subversion服务器,该服务器可以对每个路径和每个分支进行细粒度的读写访问控制。如果用户想要使用DVCS客户端的功能,则可以使用git svnhg svn将他们有权访问的存储库部分导入到DVCS中,并相应地进行交互。甚至有更高权限的人也可以合并来自权限较低的人的子树的更改,而不会失去DVCS实现提供的优秀合并工具。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接