我有一个具有以下目录结构的mercurial存储库:
/
/system
/applications
/applications/client1
/applications/client2
/applications/client3
我通过http(还没有ssl)在apache子域上提供repo,并希望限制push,pull和commit的访问权限。一般来说,我不希望有些用户看到目录,也不想看目录的历史记录!
我迷路了:(
答案 0 :(得分:4)
由于您拥有1个存储库中的所有内容,因此没有。
tl; dr:存储库始终是完整的,如果您可以克隆它,您可以看到所有内容,无法限制对本地克隆内容的访问,只能访问中央服务器托管的克隆。
Mercurial服务器可以通过两种方式处理授权:
第一种类型会使整个存储库成为只读或不可用。但是,如果用户具有读访问权限,他将能够克隆并查看整个存储库,历史记录和文件等。
但是,您可以通过禁止推送来阻止同一用户修改中央副本。这意味着该用户可以使用自己的私有克隆做任何他想做的事情,但他无法将这些更改推回到中央克隆。
另一种类型允许您控制允许更改的位置更精细一些。但是,请注意,用户将能够克隆并查看整个存储库。
此外,用户还可以使用自己的个人克隆做任何他想做的事情。但是,对于这种类型的授权,并不完全禁止推送到中央存储库,而钩子会查看正在推送的更改集,并且如果您决定不允许该用户将更改推送到“client2”内容,他试图推动的任何此类变更集都将被中止。
换句话说,用户可以修改他的私有克隆,包括更改“client2”中的内容,但如果他提交的变更集中有“client2”更改,他将无法返回中央存储库。然后,在他的推动经过之前,他必须脱掉,或以其他方式摆脱那些变化。
总结一下:
答案 1 :(得分:1)
您可以使用ACL Extension,默认情况下现在随Mercurial一起发布。扩展可以限制每个目录的所有Hg操作,不使用使用子存储库。
此外,您可以限制访问 per-branch 或 per-folder 。