Mercurial“服务器”


74

我已经使用Mercurial了一段时间,但主要是为自己使用。但是,现在,我有一个项目正在研究我们两个人在哪里构建同一个项目,并且我们可能会修改彼此的文件。

我想在服务器上设置一个Mercurial存储库,使该存储库成为“服务器”,因此我的更改和其他编辑者的更改都推送到该服务器(因此基本上是Subversion / CVS模型);我虽然喜欢Mercurial,但不想切换到Subversion之类的东西。

在我自己的网络中,一切都在Linux上完成,并且我的“服务器”已安装OpenSSH。因此,将我的更改(我在多台计算机上工作)从一台计算机推送到服务器只是“ hg push”问题。使用的协议是SSH来传输更改。

问题是我使用Linux,服务器将是Windows(所以没有OpenSSH,对吗?),另一个编辑器也将使用Windows。据我所知,在这类类型的设置中使用Mercurial的最佳方法是使存储库从源中提取更改,而不是从源中推送到“服务器”。我位于多个防火墙(不完全是我的网络)的后面,并且我的计算机从服务器看不到,并且我假设其他编辑器也位于防火墙的后面(所以我们不能只启动本地Mercurial HTTP服务器并从中获取“服务器”计算机)。

两位编辑者对服务器存储库进行更改的最佳方式是什么?(我应该补充一点,该服务器是Internet上的服务器,因此它看起来像一样google.com。它是托管的Windows服务器,但是如果需要,我可能会有权安装软件。)


我还没有找到解决方案,尽管我也没有那么努力。
user85116 2010年

1
参见hglabhq.com。它现在处于Alpha版,但如果您真的想进行测试,则可以尽早使用。
安东·戈戈列夫

Answers:


11

我建议从www.fogbugz.com上找到Kiln。这是一种商业源代码控制解决方案,基本上是带有Mercurial的Windows包装程序。

更新2020-10-24

11年前,Mercurial可能是一个可行的解决方案,但现在不再可行:Git可以工作。


请参阅我对mizipzor和Alistair Bell的评论。
user85116 2010年

2
恐怕您不了解Fogcreek的窑炉产品意味着什么。Kiln不是托管服务-公平地说,您可以根据需要使用FogCreek提供的托管服务,但是Kiln是可自动安装的服务器软件。( -定价的所有坚韧不拔的细节都在此页上讨论fogcreek.com/Kiln/Details.html#forYourServer
罗兰·特普

2
我建议您不了解Fogcreek的窑炉产品意味着什么。我在Amazon EC2服务器上购买并安装了Kiln,它现在可以正常运行。它只是围绕Mercurial的一个非常好的包装器。
康坦戈

1
您是对的,没有意识到窑炉可以安装在我自己的服务器上。谢谢你的提示。
user85116 2010年

5
检查rhodecode.org它是具有窑所具有的许多功能(尽管不是全部)的开源商业服务器。
拉尔斯·塔克曼


19

它还可能简化了将其外包的管理工作-如果您只有一个存储库,并且有几个人在推/拉该存储库,则可能比仅将其托管在Bitbucket之类的地方做得更糟。(对于一个存储库解决方案,它实际上是免费的。)

更新:现在是2020年,Bitbucket不再支持汞,请参阅:https//bitbucket.org/blog/sunsetting-mercurial-support-in-bitbucket

有关托管或自托管的免费或付费解决方案的列表,请参见https://www.mercurial-scm.org/wiki/MercurialHosting


16
当然可以。BitBucket具有私有存储库的概念,世界其他地方都看不到(他们甚至看不到它的存在)。如果您非常偏执,那么将代码放在其他人拥有的计算机上就是一个问题,那很公平;但是对于其他所有人来说,这是完全可行的。
阿利斯泰尔·贝尔,

6
@TJ,如果您不解释他们将花费多少时间,便会花时间弄清楚如何管理自己的中央存储库。
克里斯·斯图尔特

16

看看rhodecode,它是一个开源Mercurial服务器,具有Kiln提供的许多功能,包括代码搜索。它甚至与LDAP很好地集成在一起,因此您可以使用Windows域对HG用户进行身份验证。


我看了一下。这是一个很好的系统。您需要全神贯注地运行python应用程序,但这并不难。我无法说明如何将其作为Windows服务运行
James L

有一个开源版本的Rhodecode。现在称为Kallithea。pythonhosted.org/Kallithea
justengel

RhodeCode(和其他公司项目)实际上是开源的。请查看code.rhodecode.com以获取完整列表。RhodeCode 4.X系列中也有很多额外的功能,它们也不在Kallithea中,例如diff语法高亮,pull-request合并,智能代码评论等...
marcinkuzminski

14

更新:现在是2020年,Bitbucket不再支持汞,请参阅:https//bitbucket.org/blog/sunsetting-mercurial-support-in-bitbucket

有关托管或自托管的免费或付费解决方案的列表,请参见https://www.mercurial-scm.org/wiki/MercurialHosting

我建议将您的项目放在http://bitbucket.org/(Mercurial存储库托管站点)上。

如果您不希望其他人看到源,则可以设置创建私有存储库。我认为您可以使用一个私有存储库,然后他们才开始向您收费。

编辑: Bitbucket现在提供无限的私有/隐藏存储库。


23
我认为您不了解商业开发实践;无论存在任何“私有”存储库,都无法将来自该公司的原始源代码托管在其他人的服务器上。这不是一个选择。
user85116 2010年

6
商业并不意味着无知。
克里斯·斯图尔特

11
@克里斯:不同的公司有不同的妄想水平,这很好。如果85116无法说服他的公司将这些东西外包给BitBucket或Fog Creek(有些人愿意,有些人不会),那么他最好的选择可能是购买可以在本地运行的Kiln副本。我个人将外包,但在许多公司中,这在“政治上太难”了。
阿利斯泰尔·贝尔

18
哇,在谈论无知...你们当中有些人只是不明白。请一次又一次地阅读Alistair的评论,然后再听...
user85116

2
我刚才得知到位桶关闭了所有的Mercurial支持:bitbucket.org/blog/...
亚历Konnen



5

Mercurial和PuTTY是一个得到良好支持和有据可查的解决方案。


3

最简单的解决方案似乎是使用Samba共享文件夹,尤其是在仅Windows环境中。我刚刚进行了设置,似乎可以正常工作。


那就是我们团队中使用的相同解决方案。
Mizipzor


2

我们的设置: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的设置非常相似。(当然是简化版)



0

据我所知,在这种类型的设置中,最好的工作方式是使存储库从源中提取更改,而不是从源中推送到“服务器”。

我知道没有“最佳工作方式”吗?Mercurial支持大量可能的工作流程,甚至将其列出在他们的指南中。我实际上使用的是“ svn-ish”设置,我在本地存储库中进行开发,并在共享服务器上有多个存储库。如果有任何更改,我会将其推送到中央存储库中。我通过HTTPS推送它们,并且(自然地)仅将推送功能限制为开发人员。这是一种很好的工作方式。

我可以理解人们想要的中央存储库,从开发者所做的克隆拉过来的变化,但有什么能够阻止你给你自己和你的同事共享服务器上的专用仓库,从中央存储库能拉。

您可能想重新考虑对推动v拉动的想法?


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.