74

我一直在使用 Mercurial 一段时间,但主要是为了我自己的使用。不过,现在我有一个项目,我们两个人正在构建同一个项目,我们可能会修改彼此的文件。

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

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

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

对于两位编辑来说,让我们对服务器存储库进行更改的最佳方式是什么?(我应该补充一点,该服务器是 Internet 上的服务器,因此它与类似 的东西一样可见google.com。它是一个托管的 Windows 服务器,但如果需要,我可能有权安装软件。)

4

14 回答 14

50

我相信阅读该项目的文档是一个不错的开始:https ://www.mercurial-scm.org/wiki/PublishingRepositories 。

于 2009-04-11T14:03:53.980 回答
19

它还可以简化管理以将其外包——如果你只有一个存储库和几个人推/拉它,你可以做的比仅仅将它托管在像Bitbucket这样的地方要糟糕得多。(对于单一存储库的解决方案,它实际上是免费的。)

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

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

于 2009-05-22T17:21:23.720 回答
16

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

于 2011-10-27T10:21:04.833 回答
14

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

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

我建议将您的项目放在http://bitbucket.org/上,这是一个 Mercurial 存储库托管站点。

如果您不希望其他人看到源代码,他们可以设置创建私有存储库。我认为在他们开始向您收费之前,您可以拥有一个私人存储库。

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

于 2010-05-31T15:48:10.500 回答
11

我建议来自www.fogbugz.com的 Kiln 。这是一个商业源代码控制解决方案,基本上是一个带有 Mercurial 的 Windows 包装器。

2020 年 10 月 24 日更新

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

于 2010-05-31T15:44:12.707 回答
8

确实有许多可用于 Windows 的 SSH 服务器。这里有两个例子:

查看Mercurial: Windows 用户连接的权威指南一书中的Putty示例。

于 2009-04-13T21:01:03.493 回答
6

您可以使用SCM-Manager通过 http 或 https 共享您的存储库。

于 2011-02-03T08:28:46.377 回答
5

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

于 2009-04-11T13:47:59.773 回答
3

最简单的解决方案似乎是使用 Samba 共享文件夹,尤其是在仅限 Windows 的环境中。我刚设置好,好像可以。

于 2010-02-19T17:43:10.883 回答
2

我自己没有使用过它,但看看LShift 的Mercurial Server

于 2011-04-14T13:24:11.490 回答
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 所做的非常相似。(当然,一个非常简化的版本)

于 2011-12-09T06:16:47.030 回答
1

共享包含您的“服务器存储库”的Dropbox文件夹。

于 2010-08-12T08:59:21.843 回答
0

据我所知,在这些类型的设置中使用 mercurial 工作的最佳方式是让 repo 从源中提取更改,而不是将源推送到“服务器”。

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

我可以理解人们希望中央存储库从开发人员所做的克隆中提取更改,但是没有什么能阻止您在共享服务器上为自己和您的同事提供一个专用存储库,中央存储库可以从中提取.

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

于 2011-01-14T08:23:40.633 回答
0

在 2020 年,您可以使用 heptapod:

https://about.heptapod.host/

这是一个基于 gitlab 的解决方案。他们提供托管解决方案,但您也可以下载它并托管在您自己的基础架构上。

https://heptapod.net/heptapod-commercial-service-enters-free-public-beta.html#heptapod-commercial-service-enters-free-public-beta

于 2020-10-24T06:04:51.857 回答