【问题标题】:How can I retrieve only a subdirectory from a Mercurial Repository?如何从 Mercurial 存储库中仅检索子目录?
【发布时间】:2011-03-28 00:35:15
【问题描述】:

我正试图向我们的团队宣传使用 Mercurial 而不是 VSS 作为源存储库。在更新我们的构建脚本的过程中,我在尝试从 Hg 存储库中检索文件时遇到了问题。

我们的构建是使用 NAnt 自动化的,目前适用于本地构建或从 VSS 构建(即,根据需要从 VSS 中提取源代码)。我正在尝试更新它们以与 Mercurial 一起使用。

基本上,当我处理单个文件时,我没有任何问题,因为我可以使用 NAnt 的“获取”任务(在获取适当的修订哈希后)来检索单个文件。

我遇到的问题是当我需要使用不在存储库根目录中的文件的目录(和子目录)时。 我似乎无法找出正确的命令来将存储库中的子目录检索/复制到构建的“工作”目录。我基本上花了整个下午试图弄清楚如何使用 mercurial 可执行文件执行此操作(因此我可以使用 NAnt 'exec' 任务),并且基本上已经碰壁了,所以我想我会尝试在这里发布。

有人可以确认这是否可行,并就我如何能够做到这一点提供一些建议吗?我知道 Mercurial 通过文件而不是目录来跟踪更改,但似乎很奇怪我说这不是开箱即用的(据我所知)。

如果这是不可能的,我看到的唯一解决方法是维护预期文件的 NAnt 文件集列表以使用(啊!),或者将整个存储库克隆到一个临时目录,然后将文件从该源复制为需要(这对我来说就像一个障碍)。

我意识到我可以简单地为我想要使用的目录创建另一个存储库,但我宁愿不走这条路,因为我认为这会增加我正在尝试做的事情的复杂性大量(对于我们构建的所有不同库,我必须多次应用它......)。

【问题讨论】:

    标签: mercurial nant


    【解决方案1】:

    Mercurial 不允许您只获取存储库的一部分。你必须得到整棵树。它比 svn 更关注整个 repo。

    【讨论】:

    【解决方案2】:

    您可以尝试将您的存储库分割成多个存储库,并使用subrepos 功能对其进行管理。然后您可以独立拉取子目录。

    【讨论】:

    • 我已经想到了这一点,但是由于我将向团队的其他成员介绍 Mercurial,因此我试图限制我们必须对核心产品进行的修改数量依靠。一旦它成为核心版本的一部分,我就一直在考虑。
    • 但是由于您的问题似乎是面向构建的,因此可以在不需要用户使用子存储库的情况下实现它。他们仍然会从头(整个目录)中提取并获得他们的实际设置。只要他们从顶部推动,一切都应该是透明的。无论如何,我希望你能成功,因为 VSS 很痛苦!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-11
    相关资源
    最近更新 更多