【问题标题】:Is it possible to checkout a single directory from a Mercurial (HG) repository?是否可以从 Mercurial (HG) 存储库中签出单个目录?
【发布时间】:2010-02-24 17:40:07
【问题描述】:

所以,我正在尝试从 Netbeans contrib 存储库中签出 just TestNG 插件。 (或者它是模块?我是 Mercurial 的新手,所以我还不太懂行话。)

当我运行以下命令时...

hg clone http://hg.netbeans.org/main/contrib/

...我获得了整个存储库,其中包含所有 contrib 插件。可以只拉这个位置吗?

http://hg.netbeans.org/main/contrib/file/tip/testng/

谢谢!

【问题讨论】:

标签: mercurial version-control


【解决方案1】:

这个概念被称为“狭义克隆”,不,目前在 Mercurial 中是不可能的。

我们中的一些人都在关注为 Mercurial 做出贡献,但这是一个很难解决的问题。例如:

  • 如果 repo 中没有所有文件,如何计算新提交的哈希值?
  • 如果您尝试查看 contrib/testng 中某个文件的历史记录(如果该文件已从另一个文件夹移动),会发生什么情况?

【讨论】:

    【解决方案2】:

    我不确定,但我认为一般情况下的答案是“可能不是”。

    如果存储库是本地的(听起来不像您的情况),您可以执行以下操作:

    hg archive -R /path/to/my/repo -I /path/to/my/repo/folder/i/want export-folder-name
    

    (该命令需要导出非 VC 文件,而不是创建部分 repo,因为 .hg 的东西在顶层存储一次,而不是像 SVN 那样在每个文件夹中存储.)

    不过,它不适用于远程存储库。 “hg log”和hg人员explained why也没有:

    假设我向 http://www.kernel.org/hg/linux-2.6 发送了一个 log -p 命令,即 接近 10 万个变更集。每秒一个差异(大量搜索),这将 在服务器上花费大约 3 小时的 CPU/磁盘时间,没关系公吨 带宽。对于每个人来说,克隆 repo 会更快更简单 并在本地做日志。

    我怀疑hg archive 出于同样的原因无法远程工作。

    【讨论】:

    • 通过我的连接克隆 contrib 存储库需要 10 多分钟,除了 TestNG 插件之外,我不关心其中的任何内容。这没什么大不了的,因为它是一次性的,但我只是好奇是否有可能在一个步骤中提取整个 repo 的元数据,并在另一个步骤中提取存储库的一部分的实际文件.我认为答案是否定的。
    • 有趣的是,GIT 似乎也有同样的限制。我想在常见情况下设计一个为提高效率而设计的 DVCS(即存储变更集而不是文件)会使这变得困难。
    猜你喜欢
    • 1970-01-01
    • 2011-02-21
    • 2011-05-06
    • 2011-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-23
    • 1970-01-01
    相关资源
    最近更新 更多