我最近购买了一台专用服务器,需要将多个存储库从源代码控制托管服务移至该服务器。由于在服务器管理方面经验不足,我不知道如何有效地组织它。我寻求的是——
- svn.host.com、hg.host.com、git.host.com 子域名将通过 SSH 密钥作为不同存储库的根
- 轻松创建新的存储库
- 使用服务器 unix 用户列表进行身份验证,但同时根据每个项目设置权限选修的只读公共访问权限一些回购协议
不幸的是,我在 Google 上搜索的任何词都会将我引向商业托管解决方案,而不是如何构建自己的解决方案的指南。我需要一种精简版的托管解决方案,但不需要用户能够创建自己的存储库。
关于从哪里开始研究,有什么建议、教程或脚本解决方案吗?用于处理该问题的管理界面的开源解决方案(或者至少对某些人来说是完美的……
答案1
我只使用 Git,因此我会尝试至少在这方面帮助你:
如果您发现通过命令行管理您的 repos 没有任何麻烦,gitosis 应该可以很好地完成这个任务。
如果你确实需要一个 Web 界面,你可以看看 repo.or.cz (http://repo.or.cz/w/girocco.git)或 gitorious(http://gitorious.org/gitorious)。Repo.or.cz 比较丑陋,但安装起来更容易(gitorious 是开源的,但它也是 gitorious.org 的驱动软件 - 他们没有太多动力去写好的说明)
以下是更全面的选项列表:https://git.wiki.kernel.org/index.php/GitHosting
这些选项中的任何一个都可以让您轻松创建新的存储库。
现在,需要提醒的是:你永远都不要使用 unix 服务器用户列表来获取存储库权限。它很容易被搞乱,而且结果很容易是灾难性的(gitosis 使用简单的文件配置和 ssh 密钥。应该可以帮你解决问题)。
另外,我不明白为什么你需要 subversion、HG 和 Git 存储库。大多数项目只使用其中一个选项。能详细解释一下为什么吗?
答案2
SVN 可以在 vhost 中使用 Apache WebDAV 完成,使用 unix 身份验证和 subversion 自己的用户级 ACL。我对 mercurial 或 git 一无所知,但我希望它们也可以连接到 DAV。
答案3
当你想使用SSH,那么您基本上必须通过编辑authorized_keys
服务器上的文件来限制密钥。对于 Mercurial,执行此操作的主要方法是:
您可以使用
contrib/hg-ssh
脚本用于限制人们使用 SSH 登录时可以执行的命令。该文件包含一个标题来解释如何使用它,但你基本上添加$ command="hg-ssh path/to/repo"
文件中密钥的前面
authorized_keys
。这会限制密钥,使其只能用于推送和拉取到指定的存储库。您还可以使用第三方mercurial 服务器工具,如果你想要类似的东西吉托伊斯。您可以通过在特殊的管理存储库中编辑文件来管理用户及其访问权限。
查看Mercurial 维基一些其他类似的 SSH 工具。
为了HTTP, 有
Mercurial 附带的内置
hgweb
(Fast)CGI 或 WSGI 脚本。它处理推送和拉取,但不允许创建新存储库 — 为此,请登录服务器。第三方罗德岛法典项目。这为您提供了一个类似于 Bitbucket 的 Mercurial Web 前端,您可以在其中配置用户及其访问权限。它支持 LDAP 身份验证,因此您可以将其挂接到现有的 Unix 用户数据库中。
查看发布存储库的页面了解更多信息。
答案4
罗德岛法典是一个开源存储库浏览器/管理工具,内置推送/拉取服务器、LDAP/AD、权限系统和全文搜索。
您可以在这里观看直播:http://demo.rhodecode.org/