Mercurial“服务器”
我一直在使用Mercurial,但主要是为了我自己的使用。 现在,我正在做一个项目,我们两个人正在构build同一个项目,我们可能会修改彼此的文件。
我想在服务器上build立一个Mercurial仓库,把这个仓库变成“服务器”,所以我的更改和其他编辑器的更改都推送到那个服务器(所以基本上是Subversion / CVS模型)。 虽然我喜欢Mercurial,但不想切换到Subversion之类的东西。
在我自己的networking中,一切都在Linux上完成,我的“服务器”安装了OpenSSH 。 因此,从一台计算机到服务器推送我的更改(我在多台计算机上工作)只是“推送”问题。 使用的协议是用于传输更改的SSH 。
问题是,我使用Linux,服务器将是Windows(所以没有OpenSSH,对吧?),另一个编辑器也将使用Windows。 据我所知,在这些types的设置中在Mercurial中工作的最佳方式是让存储库从源中获取更改,而不是将源推送到“服务器”。 我支持几个防火墙(不完全是我的networking),我的电脑将不能从服务器上看到,我假设其他编辑器也将在防火墙后面(所以我们不能只启动本地Mercurial HTTP服务器,并从“服务器”计算机拉)。
这两个编辑人员最好的方式来更改服务器存储库? (我应该补充说,服务器是互联网上的服务器,所以它就像google.com
一样可见,它是一个托pipe的Windows服务器,但如果需要的话,我可能有权限安装软件。
我build议从www.fogbugz.com窑。 这是一个商业源代码控制解决scheme,基本上是一个Mercurial的Windows封装。
我相信阅读项目的文档是一个很好的开始: https : //www.mercurial-scm.org/wiki/PublishingRepositories 。
这也可能简化外包的pipe理 – 如果你只有一个仓库和几个人推/拉它,你可能会比在Bitbucket中的某个地方托pipe更糟。 (对于一个存储库解决scheme,它实际上是免费的。)
看看rhodecode,它是一个开源的Mercurial服务器,具有许多Kiln提供的function,包括代码search。 它甚至可以很好地与LDAP集成,因此您可以使用Windows域validationHG用户。
我build议把你的项目放在http://bitbucket.org/ ,一个Mercurial存储库托pipe站点。 如果您不希望其他人看到源代码,则可以创build私有代码库。 我认为在他们开始收费之前,你可以允许一个私人存储库。
编辑: Bitbucket现在提供无限的私人/隐藏的存储库。
当然有许多可用于Windows的SSH服务器。 这里有两个例子:
- SSH Windows
- 免费SSHd
在“ Mercurial: Windows用户连接权威指南”一书中查看“ Putty”示例。
您可以使用SCM-Manager通过http oder https共享您的存储库。
Mercurial和PuTTY是一个很好的支持和有据可查的解决scheme。
最简单的解决scheme似乎是使用Samba共享文件夹,特别是在仅限Windows的环境中。 我刚刚设置,似乎工作。
我没有使用它自己,但看看LShift Mercurial服务器 。
我们的设置:Windws服务器+ Apache + Mercurial
我们的http.conf的一部分
<Location /hg> DirectoryIndex hgweb.cgi #from mercurial source, put it in htdocs/hg AddHandler cgi-script .cgi Options ExecCGI Options +FollowSymLinks Order deny,allow Deny from all <Limit GET POST> Allow from 127.0.0.1 10.1.2 </Limit> AuthUserFile D:/hg/htpasswd AuthGroupFile D:/hg/hggroups AuthType Basic AuthName "Mercurial xxxx repositories" Require group admin somegroup RewriteBase /hg RewriteRule ^$ hgweb.cgi [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule (.*) hgweb.cgi/$1 [QSA,L] </Location> <Location /hg/project1> Require group somegroup admin </Location> <Location /hg/project2> Require group somegroup admin </Location> <Location /hg/test> Require valid-user </Location>
还有其他的文件可以设置,比如hgweb.conf / htpasswd / hggroups,但是它们很容易。
它一直工作得很好。 如果任何用户想要更改密码,我会要求他去一个在线htpasswd生成器为我生成htpasswd序列,我将它放在htpasswd文件中。
我认为我们的设置与VisualSvn Server非常相似。 (当然是一个非常简化的版本)
共享包含您的“服务器存储库”的Dropbox文件夹。
据我所知,在这些types的设置中,在mercurial中工作的最好方式是回购从源头拉取更改,而不是源头推到“服务器”。
我所知道的没有“最佳工作方式”? Mercurial支持多种可能的工作stream程,甚至在他们的指南中列出他们 。 我实际上使用“svn-ish”设置,在本地存储库中开发,在共享服务器上有多个存储库。 如果有任何变化,我把它们推到中央存储库。 我通过HTTPS推送它们,而且我自然而然地将开发能力限制在开发人员身上。 这是一个伟大的工作方式。
我可以理解,人们希望中央存储库从开发人员所做的克隆中提取出更改,但是没有任何东西阻止您给共享服务器上的自己和同事一个专用存储库,中央存储库可以从这些存储库中提取。
你可能想重新考虑你的想法,推动v拉?