mercurial:在提交之前从提交后的已删除存储库中恢复

时间:2012-04-24 03:18:23

标签: mercurial

我有一个mercurial存储库my_project,托管在bitbucket。今天我做了一些更改并将它们提交到我的本地存储库,但是还没有推出它们。

然后我主要填充并肥胖rm -rf my_project(!!!!!)。

我是否有某种方法可以检索我今天所做的更改,因为我还没有把它们推出去?我知道一天的提交听起来并不多,但确实如此!

我对这个项目的所有其他克隆只是最新的推送(不包括今天的更改)。

欢呼声。

3 个答案:

答案 0 :(得分:3)

mercurial无法救你。来自mercurial的数据存储在项目文件夹基础的隐藏目录中。在您的情况下,可能在my_project/.hg。你的递归删除也会破坏这个文件夹。

也许是file recovery tool

答案 1 :(得分:1)

没有。更改仅存储在本地存储库目录(其中的.hg目录)中,直到您推送为止。它们永远不会放在其他地方(甚至不是/ tmp)。

但是,您可能无法从磁盘恢复已删除的文件;搜索指令和工具。

答案 2 :(得分:1)

我担心提交会与工作副本一起删除,文件恢复工具是恢复丢失的.hg文件夹的唯一选择。我看到你可以从安装中恢复代码 - 太棒了!

如果你害怕再次发生这种情况,那么你可以安装一个粗略的钩子,如

[hooks]
post-commit = R=~/backup-repos/$(basename "$PWD");
              (hg init "$R"; hg push -f "$R") > /dev/null 2>&1 || true

这将强制将所有提交的副本推送到~/backup-repos下的合适仓库。 -f标志确保即使您使用诸如rebase或mq之类的扩展来修改历史记录,也可以推送备份。它还允许将不相关的repos中的变更集推送到同一个备份仓库中 - 想象两个名为foo的不同仓库。因此,备份存储库会在一段时间后以巨大的变更集结束,您可能希望偶尔删除它们。

我对此进行了简要测试,对于日常工作,我认为你不会注意到额外副本的开销,你可能会在以后感谢自己: - )

相关问题