Mercurial:如何从存储库中仅导入一些更改集?

时间:2011-04-26 21:52:54

标签: mercurial import merge repository branch

我有一个名为“我的项目”的存储库,它位于一个名为“framework”的框架中。它们中的每一个都有它的存储库,它们之间没有关系,每个分支和标签。我希望在我的存储库中接收“框架”的更新,但只能从“默认”分支而不是其他分支。当然,我不希望在我的存储库中有“框架”标签,因为它是一个完全不同的项目。

我有Mercurial HG,我希望能够直接从“管理存储库”页面从“框架”存储库中提取更改。

此外,我只想下载最新的变更集,因为我不久前开始了我的项目。如果我可以将“框架”的默认分支重命名为我的仓库中的其他名称,那将是完美的,例如“框架变更集”。

注意:我没有对“framework”存储库的写访问权。

我试着做mercurial wiki说的话:

hg pull -f -r default "framework"

没关系,直到我意识到我已经从“框架”存储库下载了所有标签,并且我从远程存储库下载了所有变更集。此外,在TortoiseHG-> Configuration->同步时,我将“框架”存储库作为该项目的远程存储库,并从远程存储库中取出,我从该存储库获得了所有分支。

当然我无法更改默认分支名称,并更新了我的默认分支,即使我尝试使用hg convert --branchmap(但我不知道如何使用它)。

我的问题有解决办法吗?甚至是部分解决方案?

2 个答案:

答案 0 :(得分:6)

我认为你可以通过以下方式解决这个问题:

拉出特定分支

使用命令行: hg pull -r <branch name>

使用TortoiseHg v1.1.X:

  1. 使用标有下载并查看传入更改集的按钮
  2. 检查传入的更改集
  3. 右键单击要拉出的分支的尖端,然后选择拉到此处
  4. 使用拒绝按钮
  5. 拒绝其余的更改集

    删除现有标签

    您可以随时手动编辑.hgtags文件以删除在“框架”分支上创建的标记,但我不知道如何在没有标记的情况下提取变更集。

    更改分支名称

    使用mq扩展名,您可以更改新“框架”更改集所在的命名分支。有关如何在TortoiseHg v1.1.X中执行此操作的说明以及CLI,请参阅“Apply patches in branch”的答案。这里的基本思想是使用您想要的名称创建一个命名分支,将您拉入补丁队列的所有“框架”变更集导入,然后将它们应用于新的命名分支。他们将从“框架”中删除分支名称,并使用您应用它们的分支的分支名称。

    如果您要多次从“框架”中提取,则需要使用修补程序队列在每次拉动时仅移动新的变更集。您应该很容易看到尚未移动的更改集。

答案 1 :(得分:0)

我们可以通过在克隆网址中附加带#符号的分支名称来指定分支名称。

e.g。

hg clone --verbose https://user@cloneurl/my_product#MY_BRANCH "C:\myCode"