0

我目前正在努力将我们现有的项目从 svn 迁移到 mercurial。
我需要找到以下用例的解决方案:
当前存在一个构建服务器,它通过 http 上的“svn export”获取一个 svn 存储库(在 LAN 上本地)。这显然不需要提供用户/密码。
然后项目被构建、打包并以二进制形式复制到指定的存储,而未版本化的副本被丢弃。

我在 Mercurial 中可以找到的所有等价物是“hg 存档”,它要求我首先克隆存储库并提供凭据。

有没有办法在不提供凭据的情况下获取存储库的未版本化副本?

谢谢你的帮助。

编辑:忘了提,不幸的是,服务器运行 Windows 机器。

4

3 回答 3

0

你需要修改你的方法。对于 mercurial 来说,做相当于导出,甚至一遍又一遍地克隆 repo 是不必要的,而且是浪费时间。

相反,clone一次且仅pullupdate触发构建时。整个存储库仍保留在您的工作区中,并且拉取可确保您在存储库中获得最新版本。一旦你的 repo 是最新的,你可以更新到任何你想要的版本。通过更新,如果您想复制旧行为,还可以清理您的文件夹。虽然清理工作区不是强制性的,但对构建服务器这样做可能是一个好习惯。

如果这解决了您的密码问题,那么您无需进一步查看。但是,如果您仍需要一些有关如何在拉取期间提供凭据的信息,请阅读此问题/答案

编辑: 所以你仍然需要构建服务器的只读访问权限,在这种情况下,你需要为你的 mercurial repo 使用不同的服务器。Rhodecode 为此提供了一些选项,请阅读此

于 2014-05-03T23:01:49.233 回答
0

“svn export” over http...这显然不需要提供用户/密码。

怎么回事?!“明显地”???丽丽?!您只能导出,因为专门启用了对 SVN-repo 的匿名 RO 访问

有没有办法在不提供凭据的情况下获取存储库的未版本化副本?

是的。但它必须在源 Mercurial-repository 端配置,如果你不管理它(或不能请求更改) - 你失败了

前言

  • 您可以svn export URL不进行身份验证,只是因为为匿名用户启用了 repo(或它的某些部分)中的某些操作
  • Subversion 是 CVCS,Mercurial 是 DVCS(因此 - 您可以使用远程 URL 执行只有最少的命令集,hg archive不在此列表中)

  • 在任何情况下,您必须在执行归档之前将存储库克隆到本地镜像中
  • 它可以是一次性操作(以后同步的开销更少)或每次都执行
  • 必须在源存储库端配置匿名只读访问。如果将 hgweb+Apache 用于 http-repositories,请阅读“Publishing Mercurial Repositories” wiki-page中的“3.6.3.2. Restrict Push to known users”
  • 即使(特殊)经过身份验证的用户也不是什么大问题:使用ACL 扩展用户将获得对(部分)存储库的读取访问权限而无需写入访问权限,用户的凭据可能存储在hgrc文件 中的(本地)克隆中
于 2014-05-04T11:01:34.130 回答
0

在 Mercurial 服务器类型的终端中,hg serve这将启动 mercurial 服务器并通知您正在提供服务的 url。

然后,您可以从中获取当前存储库中文件的 zipthe_url/archive/tip.zip并继续进行。

您还可以认真考虑授予构建服务器对存储库的读取访问权限,然后克隆存储库然后进行拉取。您还可以查看使用 post commit hooks 向构建服务器发送消息以启动构建。

假设您的构建过程的用户名 BUILD_SERVER 可以简单地在存储库配置 ( .hg/hgrc) 中设置,该用户没有写入权限:

[acl.deny]
# This list is checked first. If a match is found, acl.allow is not
# checked. All users are granted access if acl.deny is not present.
# Format for both lists: glob pattern = user, ..., @group, ...
** = BUILD_SERVER

然后,您可以让构建服务器使用hg pullhg up -C获取您的代码,包括带有 的特定修订hg up -r,而不会有构建机器进行提交的风险。有关 acl 的更多详细信息,请参见此处

于 2014-05-05T19:17:03.357 回答