【问题标题】:Fetching a single file from another mercurial repository [duplicate]从另一个 mercurial 存储库中获取单个文件 [重复]
【发布时间】:2009-08-03 18:28:09
【问题描述】:

可能重复:
Mercurial: copying ONE file and its history to another repository

我的本​​地机器上有几个存储库。 一个是我的主要代码,另一个是各种有用的代码/工具。 这是两个根本不同的回购。 可能设置一个新的存储库并将这两个作为子存储库拉入,但我想等到 Mercurial 开发人员将子存储库标记为非实验性后再这样做。

其中一个有用的代码文件变得如此有用,我想把它放到我的主代码区……但我想维护它的历史。当然,这会导致分叉的一些变体,但这是可以接受的。 (最好的情况是能够来回推拉它并不断更新其历史记录)。

【问题讨论】:

  • 您的问题是什么?您只想获取一个文件?
  • 是的。我想获取 1 个文件及其修订历史记录。
  • 这里问了同样的问题,stackoverflow.com/questions/3643313/…,问题和答案都更清晰

标签: mercurial


【解决方案1】:

我只是使用 1.3 中上线的 subrepo 功能。它可能会略有变化,但您不会因为向后兼容而感到高高在上。

如果你做不到,那么你需要做的是:

  1. hg convert 与文件映射一起使用,该文件映射会删除除您想要的文件之外的所有文件,并将具有单个有用文件的存储库转换为仅包含该文件及其所有历史记录的新存储库
  2. 然后 hg pull 从新的单文件完整历史存储库进入目标存储库
  3. hg merge 在目标仓库中,您将拥有该文件及其所有历史记录

另一种选择是hg export 整个工具库,使用grepdiff(difftools 的一部分)限制为一个文件,然后导入目标库,但这太疯狂了。

【讨论】:

  • 步骤 1.5:hg 更新。 :-)
  • 我认为不需要更新。您在目标 repo 中的工作目录将位于旧提示中,并且“hg 合并”将正确合并到新的另一个头中。
  • 'hg update'(可能)对于该过程的运行不是必需的,但是如果您想检查新创建的存储库以确保它是正确的,那么不要忘记更新。我忘记了,当新目录为空时,我真的很困惑。
【解决方案2】:

简短的回答是你不能复制一个文件它的历史简单地,正如这个线程中所说的:

https://www.mercurial-scm.org/pipermail/mercurial/2009-April/025105.html

我对 DVCS 比较陌生,您确实必须将每个 repo 视为一个独立的包。不像 svn 或 p4,您可以将不同的项目挂在根目录下并按照您的喜好配置它并进行部分 repo 签出。 (也就是说,我真的很喜欢能够快速克隆 repos 以进行尝试的灵活性。并且能够在本地机器上提交。)

我只是在看一个类似的问题。我已经分支了一个 repo 来进行更改,我只想要一个变更集中的一个文件。很高兴有历史。

  • 你可以看看:

    hg cat
    

    这可能涉及编写脚本来传输历史记录,即在目标 repo 中提交 N 个变更集,并使用来自源的 hg cat 结果。想知道是否有扩展来执行此操作?

  • 您可以获取要复制的文件的日志并将其粘贴到提交注释中。它不在元数据中,但您确实有记录和所有哈希值等。

【讨论】:

    【解决方案3】:

    可能是

    hg export
    

    也可以帮助你。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-25
      • 2011-02-21
      • 2012-01-09
      • 1970-01-01
      • 2011-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多