Mercurial:恢复文件

12

我想恢复一个在某个提交中被删除的文件,并将其以不同的名称恢复,以便它与历史记录共享。 在Subversion中,我会这样做:

svn cp src@REV dest

即使用peg修订。在Mercurial中的等效方法是什么?


我不相信hg可以直接跟踪文件在重命名之间的历史记录。不过这是一个有趣的问题。 - Paul Nathan
2个回答

7

我不认为Mercurial有内置的方法来实现这一点。但我认为您可以通过以下方式获得相同的效果:

hg up -C REV # Update to revision containing a copy of the file
<modify the file in question>
hg commit  # Create second head based on old revision
hg merge # Merge two heads into one
# Note: make sure to choose to have the file exist
hg commit
hg mv MYFILE MYNEWNAME

这将使文件保留其所有旧历史记录,Mercurial会尽可能跟踪它。

1
我本来会在新的未命名分支中,在合并之前进行'mv',但最终结果是相同的。 - Ry4an Brase
这对我来说很有效,Ry4an建议只需将文件移动到您的过程建议的“<修改有问题的文件>”位置。 - Martin v. Löwis

7
如果你在REV+1中使用 "hg remove" 删除了src,那么它只会在REV+1中被删除:
hg revert -rREV src
hg status
A src
hg rename src dest
hg commit -m"restored src and renamed it to dest"

工作?

编辑:我刚刚测试了一下,看起来没问题。实际上,“hg add”对于src并不必要,因为还原会处理这个问题。但是,如果你只提交一个提交而不是两个(就像上面的代码中那样),hg会发出警告:

src尚未提交,因此不会为dest存储任何复制数据。

希望这能帮到你。


这将有助于恢复文件;但它不允许同时重命名(因为添加的文件不被视为具有历史记录)。然而,通过两个提交,这也可以实现。 - Martin v. Löwis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接