从另一个mercurial存储库中获取单个文件

时间:2009-08-03 18:28:10

标签: mercurial

  

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

我的本​​地计算机上有几个存储库。 一个是我的主要代码,另一个是各种有用的代码/工具。 这是两个根本不同的回购。 可能可能有意义设置一个新的回购并将这两个作为子回购,但我想等到Mercurial开发标记子回购为非实验性之前我做到了。

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

3 个答案:

答案 0 :(得分:8)

我只使用1.3中在线提供的subrepo功能。它可能会稍微改变,但你不会保持高度和干向后兼容性。

如果你不能这样做,那么你需要做的是:

  1. hg convert与一个文件图一起使用,该文件图删除除所需文件之外的所有文件,并将具有单个有用文件的repo转换为仅包含该文件及其所有历史记录的新repo
  2. 然后hg pull从新的单文件完整历史记录回购到目标仓库
  3. 目标仓库中的
  4. hg merge,您将拥有该文件及其历史记录
  5. 另一个选项是hg export整个工具仓库,使用grepdiff(difftools的一部分)来限制只有一个文件,然后导入目标仓库,但这很疯狂。 / p>

答案 1 :(得分:3)

简短的回答是,您无法复制文件其历史简单,如本主题所述:

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

我对DVCS比较陌生,你真的必须把每个回购都想象成一个独立的包。与svn或p4不同,您可以在其中挂起根目录下的不同项目,并根据您的喜好配置它并进行部分repo签出。 (也就是说,我真的很喜欢能够快速克隆repos以尝试解决方案的灵活性。并能够在本地计算机上提交。)

我只是在看一个类似的问题。我已经分支了一个仓库进行更改,我只想要一个变更集中的一个文件。拥有这段历史真是太好了。

  • 你可以看一下:

    hg cat
    

    这可能涉及编写一个脚本来传输历史记录,即使用来自源的hg cat结果在目标仓库中提交N个变更集。不知道是否有扩展可以做到这一点?

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

答案 2 :(得分:0)

可能是

hg export

也可以帮助你。