2

我不小心重命名了 Mercurial 之外的文件。当我提交更改时,Mercurial 将更改视为两个不相关的文件(即删除和添加)。我需要回去比较这两个版本,但当 Mercurial 将它们视为跨不同版本的两个相应文件时,我不知道该怎么做。我该怎么做才能区分文件?

4

3 回答 3

3

如果您想真正修复历史记录以便 Mercurial 知道重命名(并且可以在需要时在未来的合并中使用该信息),有一种方法可以在 Mercurial wiki 上的提示和技巧页面上记录。

当前内容复制到此处以方便使用(以防链接稍后断开):

脚步:

  1. 将工作目录更新到重命名之前
  2. 做一个实际的“hg rename”,这将创建一个新的头
  3. 将该新头合并到您进行“手动”重命名的修订中(不是头修订!)
  4. 然后最后将头部修订合并到这个合并结果中。

建议:

  1. 先做一个克隆然后再做,以防万一!
  2. 完成这些步骤后,使用文件比较工具检查原始文件和克隆文件是否相同
  3. 检查任何移动文件的文件历史记录以确保它现在已恢复

话虽这么说,如果您只想比较当时的内容,那么您绝对可以在不让 Mercurial 意识到重命名的情况下完成此操作(如 Stephen Rasku 的回答中所述)。事实上,您可以结合使用“hg cat”和外部比较工具来比较任何文件,而不仅仅是 Mercurial 知道的文件。

于 2012-12-09T02:55:30.107 回答
2

修复历史:

  • 使用新文件名更新到第一个变更集,将文件保存在 WC 之外
  • 更新到错误替换变更集的父级,正确替换文件(使用重命名跟踪),提交,获得第二个头
  • 将旧匿名分支的所有变更集重新设置在新的好变更集之上
  • --close-branch在替换错误的变更集上或删除此不需要的变更集或保持不活动的头部完好无损
于 2012-12-07T21:06:46.463 回答
2

你没有说你使用的是什么操作系统。以下内容适用于 Linux 上的 bash:

diff <(hg cat -r rev1 file1) <(hg cat -r rev2 file2)

vimdiff如果你想要一个视觉差异,你可以用另一个程序替换差异。

于 2012-12-07T22:13:16.217 回答