Mercurial克隆清理匹配上游

时间:2011-09-26 23:35:23

标签: mercurial

我有一个存储库的hg克隆,我已经在几个月内在本地进行了大量更改,并将它们推送到我的克隆版谷歌代码。不幸的是,作为一个菜鸟,我在默认分支上提交了一大堆更改。

现在我想确保我当前的默认值是完全上游的,然后我可以在默认情况下进行正确的分支,只能在分支上工作..

但是我怎么做那个清理呢?

作为参考,我的克隆是http://code.google.com/r/mosabua-roboguice/source/browse

PS:我用git解决了同样的问题并清理了它:Cleanup git master branch and move some commit to new branch?

4 个答案:

答案 0 :(得分:2)

首先,提交默认分支时没有错误。您通常不希望为Mercurial中的每个任务创建单独的命名分支,因为命名分支是永久的。您可能希望查看更接近git分支的书签功能(“hg help bookmarks”)。因此,如果您现有的变更集唯一的问题是它们在默认分支上,那么它们确实没有任何问题。别担心。

然而,如果你真的想重新开始,明显的,直截了当的做法是从上游重新开始。您可以通过移动现有的回购和重新克隆来保持杂乱的变更集。然后将旧仓库中的变更集移植到您选择的分支上的新变更集中。

如果您不想花时间/带宽用于新克隆,则可以使用(高级,危险,不适合初学者)strip命令。首先,您必须启用mq扩展程序(谷歌或查看手册 - 我故意不在此解释它,因为它是危险的)。然后运行

hg strip 'outgoing("http://upstream/path/to/repo")'

请注意,我正在使用Mercurial 1.7中添加的revsets功能。如果你使用的是旧版本,那么就没有简单的方法了。

答案 1 :(得分:1)

前言 - 所有历史记录更改仅适用于未发布的回购。在编辑本地历史记录后,你必须从头开始推送到GoogleCode的repo(在GC上删除repo,创建空,推送) - 否则你将在默认分支中再增加一个HEAD

曼弗雷德

简单(但不短)的方式 - 仅默认+ MQ

  1. 正如Greg所说,安装MQ
  2. 将所有提交移到上游代码
  3. 之上的MQ补丁中
  4. 永远保留您的更改
  5. 检查,编辑是否有必要并在每次上游拉动后重新整合补丁(这样你自己的没有MQ补丁的CG-repo将与上游相同)
  6. 更复杂 - 中间的MQ +单独的分支

    1. 上面
    2. 上述
    3. 创建命名分支,切换到它
    4. “完成”补丁
    5. 向上游拉,与您的分支更改合并( defaut yourbranch)
    6. 仅将您的更改提交至yourbranch
    7. 衍合

      1. 启用rebase扩展
      2. 创建命名分支(包含变更集?TBT)
      3. 将您的变更集重新定位到新祖先,测试结果
      4. 见“更复杂”一章
      5. 中的5-6

答案 2 :(得分:1)

最好的方法是使用两个克隆。使用远程仓库时,我无法控制我总是保留一个名为“virgin”的本地克隆,我不做任何修改。例如:

hg clone -U https://code.google.com/r/mosabua-roboguice-clean/ mosabua-roboguice-clean-virgin
hg clone mosabua-roboguice-clean-virgin mosabua-roboguice-clean-working

请注意,因为Mercurial对本地克隆使用硬链接,并且因为第一个克隆是带有-U的克隆(没有工作目录(git术语中的裸存储库))这会占用 no 额外的磁盘空间。

在robo-guice工作中完成所有工作并拉入robo-guice处女,看看上游发生了什么,并再次使用roboguice工作以获得上游变化。

事实上,您可以通过创建远程仓库的新克隆来执行此类操作,如果磁盘空间很珍贵,请使用relink扩展来关联它们。

答案 3 :(得分:0)

也许你可以试试Convert extension。它可以使存储库处于更好的状态,同时保留历史记录。当然,在完成修改后,您将不得不删除旧的仓库并上传转换后的仓库。

相关问题