1

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

然后我主要塞满和胖手指rm -rf my_project(!!!!!!)。

鉴于我还没有将它们推出,有什么方法可以检索我今天提交的更改?我知道一天的提交价值听起来并不多,但确实如此!

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

干杯。

4

3 回答 3

3

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

那么也许是文件恢复工具

于 2012-04-24T03:22:49.257 回答
1

不会。在您推送之前,更改仅存储在本地存储库目录(其中的 .hg 目录)中。它们永远不会放在其他任何地方(甚至 /tmp)。

不过,您有可能能够从磁盘中恢复已删除的文件;四处寻找相关说明和工具。

于 2012-04-24T03:23:17.557 回答
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 等扩展。它还将允许将变更集从不相关的存储库推送到同一个备份存储库中——想象两个不同的存储库名为foo. 因此,备份存储库将在一段时间后以大量变更集结束,您可能希望偶尔删除它们。

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

于 2012-04-24T07:56:54.403 回答