【问题标题】:What to do when you have too many changes within a single patch in an hg mq the patch queue?当您在 hg mq 补丁队列中的单个补丁中有太多更改时该怎么办?
【发布时间】:2011-03-24 13:32:01
【问题描述】:

hg mq 插件的目的是能够完美地提交到您的存储库,而不是混淆您在心不在焉的 ADHD 中所做的更改,从而导致在代码中漫无目的;

例如....

当我注意到错误 y 并开始处理它时,我正在处理错误 x。此时,您应该在补丁队列中创建一个新补丁,以免在将 hg qfinish 提交到您的存储库时混淆更改。

现在假设您忘记了制作新补丁并在过程中hg qrefresh。然后后来意识到你的错误,你希望将一个补丁的更改分成两个补丁。

我意识到这与编辑队列中的补丁文件(和新的补丁文件)有关,以便将更改分成单独的补丁并稍后提交。但是,我还不擅长编辑差异补丁文件。

我在哪里可以了解这方面的信息?怎么办?

【问题讨论】:

    标签: mercurial diff patch mercurial-queue


    【解决方案1】:

    另一个选项(假设它在您的平台上运行)是 TortoiseHG 2.0 版。 “不恰当”命名的 Shelve 实用程序允许在补丁之间移动块和文件,或移动到工作目录中。它适用于 Windows、Linux 和可能的 OSX。

    http://tortoisehg.bitbucket.io/

    【讨论】:

      【解决方案2】:

      如related SO question 中所述,请查看 MQ 教程的“Split a patch into multiple patches”部分。

      【讨论】:

        【解决方案3】:

        您可以激活record extension,在 .hgrc 中添加以下行:

        [extensions]
        hgext.record =
        

        你可以用

        清除你当前的补丁
        hg qrefresh nothing
        

        (请注意,“nothing”只是一个随机字符串:qrefresh 的参数是必须包含在当前补丁中的文件列表,因此任何不是修改文件名的文件都将做 - 我通常使用“0”)

        现在使用hg qrecord <patchName>,您可以交互选择哪些更改必须在新补丁中进行。然后可以使用qnew 或另一个qrecord 将剩余的更改添加到另一个补丁中。您终于可以使用qpop、qfold 或编辑.hg/patches/series 来合并和重新排序补丁。

        【讨论】:

        • 这听起来很有趣...我得看看那个。 干杯!
        • 如果自动补丁太粗糙,hg qcrefresh(crecord 扩展的一部分)还允许您按单独的行进行选择。
        【解决方案4】:

        我有一个 shell 别名 viq="vim $(hg root)/.hg/patches/",我只在这些情况下使用它!

        我将运行 viq 来提取补丁,然后手动编辑差异并将大块头移动到其他适当的补丁中。

        比起交互式方法(例如,git add -i),我更喜欢这种方式,因为在交互式提示下工作不像在编辑器中工作那样安全(我知道我的编辑器会进行备份、进行微不足道的撤消等) …)。

        【讨论】:

        • 我在帖子中没有说清楚,但是我知道补丁文件在哪里,只是我对编辑补丁文件的细节不是很了解。
        • 啊,抱歉——我并不是说你不知道他们在哪里。我只是说,鉴于我知道的所有选项,这就是我更喜欢这样做的方式。
        • 另外,只要您在hunk level 进行编辑,这真的很容易——您可以随意移动大块头,只要正确的标题(即--- a/foo\n+++ b/foo)在移动的帅哥上方的某个地方。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-04-03
        • 2020-12-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-24
        相关资源
        最近更新 更多