2011-08-24 69 views
4

documentation他们使用这些内容的映射文件:使用hg convert合并2 repos而不是hg pull -f有没有优势?

$ echo include subfoo > /tmp/myfilemap 
$ echo rename subfoo . >> /tmp/myfilemap 
$ hg convert --filemap /tmp/myfilemap /path/to/repo/foo /tmp/mysubfoo-repo 

什么是合并2个回购等优点。有没有这样做的正当理由:

hg pull -f other_repo 
hg merge 

他们通过重新命名subfoo来完成。 ?

+0

2 repos是相关的(1是另一个的克隆还是从同一个repo克隆)或完全不相关? –

+0

回购是完全无关的。 – Geo

回答

4

他们的示例(您在问题中发布的subfoo文件映射)用于将现有回购的子目录转换为其自己的存储库,并具有该子目录下所有文件的历史记录。将subfoo重命名为.意味着源回购中目录subfoo的所有文件和目录现在都将位于新回购的根目录下。

你可以使用一个filemap与rename反其道而行之并作出回购A的根目录的内容现在子目录的内容,然后使用pull回购乙结合起来:

> echo rename . subfoo > /tmp/myfilemap 

> hg convert --filemap /tmp/myfilemap /path/to/repoA /path/to/repoA_converted 

> hg -R /path/to/repoB pull -f /path/to/repoA_converted 

> hg merge 

然而,subrepos可能是更好的选择。

+0

但是,转换允许你指定在哪个文件夹下拉?如果我做了pull + merge,如果我想让它们位于不同的目录中,我必须自己移动这些文件。 – Geo

+0

啊,这必须是重命名的东西。对? – Geo

+0

没错。重命名允许您在不添加变更集的情况下更改repo en-masse中的文件路径。在我的例子中,一个'/ path/to/repoA/myfile.txt'文件最终会成为'/ path/to/repoA_converted/subfoo/myfile.txt'。 –