如何比较中间重命名的文件的两个修订版,而 Mercurial 不知道重命名?



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

您没有说明您使用的是什么操作系统。以下内容将在Linux上与bash一起使用:

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

如果你想要一个视觉差异,你可以用vimdiff这样的程序来代替差异。

如果你想真正修复历史,让Mercurial知道重命名(如果需要,可以在未来的合并中使用这些信息),有一种方法可以做到这一点,可以在Mercurial wiki的Tips and Tricks页面上记录。

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

步骤:

  1. 在重命名之前将工作目录更新为
  2. 做一个实际的"hg-rename",这将创建一个新的头
  3. 将新标题合并到您进行"手动"重命名的修订中(而不是标题修订!)
  4. 然后最终将标题修订合并到此合并结果中

建议:

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

也就是说,如果你只想在某个时间点比较内容,你肯定可以在不让Mercurial知道重命名的情况下完成这一任务(正如Stephen Rasku的回答中所提到的)。事实上,您可以使用"hg-cat"和外部比较工具的组合来比较任何文件,而不仅仅是Mercurial知道的文件。

修复历史:

  • 用新文件名更新到第一个变更集,将文件保存在WC之外
  • 更新到错误替换变更集的父级,正确替换文件(带有重命名跟踪),提交,获得第二个头
  • 将旧匿名分支中的所有变更集重新绑定到新的好变更集之上
  • 坏的替换变更集上的--close-branch或删除此不需要的变更集或保持不活动的头完好无损

最新更新