代码之家  ›  专栏  ›  技术社区  ›  nonopolarity

使用mercurial(hg),您是否可以“hg退出”您为不想推送的文件所做的所有提交,然后执行推送?

  •  2
  • nonopolarity  · 技术社区  · 14 年前

    使用mercurial(hg),您是否可以“hg退出”您为不想推送的文件所做的所有提交,然后执行推送?

    因为Mercurial(或Git)不允许我们将单个文件或单个文件夹推送到另一个存储库,所以我想:

    1)怎么样,我们只是看看我们所做的承诺,以及 hg backout 我们不想推的那些。

    2) hg out -v 查看将被推送的文件列表

    3)现在做推手 hg push

    这是个好方法吗?

    这是因为我得到了以下建议:

    1)如果您不希望推送该文件(但有时甚至只是为了实验,我确实希望保留中间修订版),请不要提交该文件(也许我可以) hg commit 汞析出 立即防止被推。)

    2)有人告诉我 hg clone tmp 从这个存储库中,我要将本地文件推送到这个tmp工作目录, HG提交 对此 tmp 存储库,然后进行推送。但我发现 汞克隆TMP 将占用400MB的新数据和文件,并使硬盘工作非常困难,只需推一个文件?所以我不想用这种方法。

    3 回复  |  直到 14 年前
        1
  •  3
  •   Michael Ekstrand    14 年前

    如果你这样做了 hg backout ,则文件仍将被推送,但在提示修订中被省略。远程存储库将接收更改集以添加文件,然后接收退出更改集以删除它们。因此,它将具有您不想推送的文件的历史记录。

    一旦提交了一个文件,任何涉及该文件的变更集移动到另一个存储库都将包括该文件的更改。如果您所要做的就是阻止签出远程存储库的提示,使其不包含该文件,那么您所描述的内容将起作用。如果没有,那么就没有保存历史的方法来完成您想要的事情,除了从不推动任何涉及到相关文件的变更集之外。您可以使用 convert 创建一个新的存储库,但不跟踪不需要的文件,而是生成一个具有新历史记录的新存储库。

        2
  •  1
  •   dimo414    14 年前

    您对“非常努力地工作”的衡量是有缺陷的——克隆一个千兆字节、数千个提交报告的工作对于任何现代硬盘都是微不足道的,更不用说您的了,特别是对于临时存储库,空间需求完全不相关。

    最简单的方法是将repo复制到您要推送的修订版,推送该克隆,然后删除。虽然您正在寻找的解决方案可以节省磁盘的一些旋转,但它们远比它们的价值复杂得多。

    Mozilla和python*都使用了mercurial,我向您保证,它们的回购协议比您要处理的要大得多,也要复杂得多。如果他们能毫无问题地使用它们,你当然也可以。尝试一下,不要对你使用的几个字节施加压力,这是值得的。

    *python正在转换为mercurial

    编辑 向阿德米特里克发表评论时,你误解了乔尔的观点。尽早提交,经常提交,不要害怕浪费提交,但这并不意味着每当你犯了一个错误时就应该退出——这将击败所有版本控制的要点。如果你做了一些你不喜欢的事情,修复它,然后再做一次。回滚是一项功能,因为它可能很有用,而不是因为您应该一直这样做。

        3
  •  0
  •   Adam Dymitruk    14 年前

    我不知道如果您提交了更改,为什么您不想推送某些文件。

    我会做另一个分支,然后重新平衡-我在Git的master上移除它们。当你准备好推送其他文件时,你可以在另一个分支上重新设置-i以选择这些文件,并在准备好时向master提交cherry pick。

    推荐文章