反复无常的“服务器”

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

我想在一个服务器上设置一个 Mercurial 存储库,使该存储库成为“服务器”,这样我的更改和其他编辑器的更改都会推送到该服务器(所以基本上是 颠覆/CVS模型) ; 不过我喜欢 Mercurial,不想切换到类似 Subversion 的东西。

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

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

对于两个编辑器来说,将更改传递到服务器存储库的最佳方式是什么?(我应该补充说,服务器是互联网上的一个服务器,所以它就像 google.com这样的东西一样可见。这是一个托管的 Windows 服务器,但如果需要的话,我可能会有安装软件的权限。)

33650 次浏览

Mercurial 和 腻子是一个受到良好支持的、有充分文档说明的解决方案。

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

当然有许多 SSH 服务器可用于 Windows:

查看 Mercurial: 最终指南书中关于 Windows 用户连通性的 油灰示例。

它还可以简化管理,将其外包出去——如果您只有一个存储库,并且只有几个人推送/拉动它,那么您可能会做得更糟糕,而不仅仅是将它托管在像 比特巴克特这样的地方。(对于一个存储库解决方案,它实际上是免费的。)

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

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

最简单的解决方案似乎是使用 Samba 共享文件夹,特别是在纯 Windows 环境中。我刚刚安装好,看起来很有用。

我建议从 第一季,第12集窑。这是一个商业的源代码控制解决方案,基本上是一个 Windows 包装器与 Mercurial 的引擎盖。

更新2020-10-24

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

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

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

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

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

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

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

据我所知,在这些类型的汞工作的最佳方式 设置是为了回购从源代码中提取变更,而不是 源推送到“服务器”。

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

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

你是不是应该重新考虑一下你对推 V 拉的看法?

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

我没有使用它自己,但确实看看 Mercurial Server的 LShift。

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

我们的设置: Windows 服务器 + 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 文件中。

我认为我们的设置非常类似于 VisualSvnServer 所做的(当然,是一个非常简化的版本)

到2020年,你可以使用七脚支架:

Https://about.heptapod.host/

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

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