【问题标题】:Using Mercurial (hg), can you just "hg backout" all the commits you did for the files you don't want to push, and then do a push?使用 Mercurial (hg),您可以“hg backout”您对不想推送的文件所做的所有提交,然后再推送吗?
【发布时间】:2010-06-15 00:05:15
【问题描述】:

使用 Mercurial (hg),您可以“hg backout”您对不想推送的文件所做的所有提交,然后再推送吗?

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

1) 怎么样,我们只查看我们所做的提交,以及 hg backout 那些我们不想推送的提交。

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

3) 现在通过hg push进行推送

这是个好方法吗?

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

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

2) 有人告诉我只是从我要推送到的那个存储库中 hg clone tmp,然后将本地文件复制到这个 tmp 工作目录,hg commit 到这个tmp 存储库,然后做一个推。但是我发现hg clone tmp会占用400MB的新数据和文件,而且让硬盘很辛苦,只推1个文件?所以我宁愿不使用这种方法。

【问题讨论】:

    标签: git mercurial dvcs


    【解决方案1】:

    如果您执行hg backout,则文件仍将被推送,但在提示修订中被省略。远程存储库将接收变更集以添加文件,然后接收回退变更集以删除它们。所以它会有你不想推送的文件的历史记录。

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

    【讨论】:

      【解决方案2】:

      您对“非常努力工作”的衡量是有缺陷的 - 克隆数 GB、数千次提交的 repo 的工作对于任何现代硬盘驱动器来说都是微不足道的,更不用说你的了,而且,特别是对于临时存储库,空间要求是完全不相关。

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

      Mozilla 和 Python* 都使用 Mercurial,我向您保证,它们的存储库比您处理的要大得多且复杂得多。如果他们能够毫无问题地使用它们,那么您当然也可以。试一试,不要担心您使用的几个字节,这将是值得的。

      *Python 正在切换到 Mercurial

      编辑 向 adymitruk 发表评论时,您误解了 Joel 的观点。尽早提交,经常提交,不要害怕浪费提交,但这并不意味着你应该在犯错时退出——这会破坏对所有内容进行版本控制的全部意义。如果你提交了你不喜欢的东西,修复它并再次提交。回滚是一项功能,因为它很有用,而不是因为您应该一直这样做。

      【讨论】:

        【解决方案3】:

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

        我会在 GIT 的 master 上创建另一个分支并 rebase -i 以删除它们。当您准备好推送其他文件时,您可以在另一个分支上 rebase -i 以选择这些文件,并在准备好时将其挑选到 master。

        【讨论】:

        • 那是因为 hginit.com 上的 Joel 建议经常提交,甚至只是为了进行实验......所以我可能会更改一个 CSS 文件,当它看起来不错时提交,然后进行大量更改,当它搞砸了,我可以hg revert。但似乎我也必须推送这个文件,即使它只是为了实验。所以有些人告诉我不要提交......似乎只要我hg backout那个文件就可以提交
        猜你喜欢
        • 1970-01-01
        • 2018-12-11
        • 2012-12-18
        • 2021-06-03
        • 2011-08-28
        • 2012-01-01
        • 1970-01-01
        • 2012-11-25
        • 1970-01-01
        相关资源
        最近更新 更多