【问题标题】:How to rename a file using Mercurial Queues?如何使用 Mercurial Queues 重命名文件?
【发布时间】:2012-11-28 01:58:29
【问题描述】:

Mercurial Queues 是关于补丁的,而补丁对文件重命名一无所知。这是 Mercurial Queues 不支持文件重命名的原因,还是我在重命名文件时做错了什么?我研究了一个补丁队列,只修改了一个名为foo 的文件。现在我回到补丁 4 并通过 hg mv 重命名文件:

hg qpop 4     # Unapply all patches until patch 4.
hg mv foo bar # Rename file and led Mercuial know about it.
hg qrefresh   # Should apply changes to unapplied patch 4.
hg qpush -a   # Should apply all unapplied patches.

我收到以下错误:

unable to find 'foo' for patching
1 out of 1 hunks FAILED -- saving rejects to file foo.rej
patch failed, unable to continue (try -v)
patch failed, rejects left in working dir
errors during apply, please fix and refresh 5.diff

那么我应该如何使用 Mercurial 队列处理文件重命名? Mercurial commits 处理文件重命名是有原因的(如果没有,它会丢失关于重命名后编辑文件)。

更新

刚刚注意到hg histedit折叠变更集和hg collapse也丢失了文件重命名信息,文件显示为新文件而不是重命名文件,我想这是出于同样的原因。在 Mercurial 中似乎无法在不丢失该信息的情况下折叠私有变更集?

更新 2

发现使用hg rebase 及其--collapse 选项可以在不丢失重命名信息的情况下折叠私有变更集,例如hg rebase -s 5 -d 4 --collapse。其他命令应该保留重命名信息的问题仍然悬而未决,但是使用hg rebase 命令至少有一种方法可以达到预期的结果。

【问题讨论】:

  • 它看起来有点奇怪,因为hg help mq 有关于您的情况的注释:“默认情况下,mq 会在需要时自动使用 git 补丁,以避免丢失文件模式更改、复制记录、二进制文件或空文件的创建或删除。”

标签: mercurial mq mercurial-queue


【解决方案1】:

这就是 Mercurial Queues 不支持文件重命名的原因吗?

没有。

或者我在重命名文件时做错了什么?

没有。

是的,链中的补丁会有麻烦,如果它们是为foo文件准备的,但稍后会是bar,但由于不同的原因:补丁是独立的,并且每个每个补丁对其他补丁的更改一无所知 - 它们与上下文一起工作,而不是单独补丁中的操作序列。您已正确重命名,但此变更集使以后的变更集无效,在旧内容

上准备

【讨论】:

  • 那么我应该如何使用 Mercurial Queues 处理文件重命名?
  • 也许(只是猜测,无法在 atm 验证它)您可以手动创建一个 git 样式的差异(支持重命名),将其放入 .hg/patches/somename 并 echo somename >> .hg/补丁/系列,看看它是否适用?
  • 我会确认创建一个 git 样式的 .patch 文件至少会在导入后保留重命名信息
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-03
相关资源
最近更新 更多