2010-12-11 51 views
3

我认为我的变更集可能发生了不好的事情。'bzr update'擦除了我所有的本地提交。帮帮我!

为了记录,我使用过git,hg和svn以前的一般成功。我对bzr的理解不够完整。

这里是我(Windows XP中):

1)使用的bzr的svn签创建一个文件夹。称它稳定
2)从我用于开发的分支中分支出的文件夹。称之为开发

我的计划是在开发分支上使用commit --local来跟踪更改,并且它正在工作。

然后,我做了'bzr更新'(因为它在我尝试推送时抱怨)。当时,stable有一个更老的代码副本。那么,现在的开发具有相同的旧版本。 'bzr log'显示我的本地提交没有任何证据!

有人可以向我解释发生了什么事,我能做些什么来恢复我的旧代码?

回答

5

好的,我找到了。经过一番疯狂的搜索之后,我在查看这个其他的stackoverflow问题后发现了密码字“dead head”: Some code was lost after doing bzr commit --local, bzr pull, bzr commit

但是,他们提出的解决方案并不适合我。做什么工作,被发现在 http://chrismarinos.com/don-t-loose-your-head-with-bazaar/

最终的答案是要找到使用头--all版本ID,然后用拉得让所有的修订:

bzr heads --all 
bzr pull --overwrite -r revid:<revision-id> 

我所有的代码是回,现在备份了3到4次。

+1

哦,最优秀的;很高兴你找到答案。还是要考虑搞清楚一种复制的方法,一个错误报告,或许稍微改变你的工作方式,以减少这种事情再次发生的可能性。我觉得最好是让事故/错误不可能发生,尽管缺点是我可能通过不信任我使用的所有软件并以防止它们混乱的方式工作来隐藏我的核心工具(包括'bzr')中的错误... – 2010-12-11 00:33:48

+0

我确实会提交一份有关这方面的错误报告,“bzr update”可能会造成破坏性的东西似乎很荒谬。 – 2010-12-11 00:39:26

+0

'bzr heads --dead' should be too too。 – bialix 2010-12-11 21:22:52

5

老实说,我不能说怎么说都不会发生,它老老实实的样子,这将是该行为的(听起来非常灾难性的错误),除非你不喜欢的东西bzr pull --overwritebzr pull冲突都已解决后做了bzr revert

首先看看你是否可以可靠地复制这个问题。不管这是否可能,但是,file a bug report against bzr以便可以跟踪此问题。此外,在执行之前的任何其他操作之前,请备份您在这些分支中拥有的数据。如果您一直在共享存储库中工作,请备份所有内容。如果需要这种激烈的努力,那么它可用于法医恢复。不过,要获得更多的帮助,你必须与Bazaar开发者合作。在FreeNode的IRC网络的#bzr房间里闲逛以寻求帮助可能会有帮助。正如通常寻求IRC支持一样,耐心是关键,即使你现在处境非常紧急。他们可能会给你一些关于如何挖掘这些提交的Python代码或指令,他们也可能会告诉你如何找出发生的事情。

这就是说,我这样做的时候通常会做的是我有一个未绑定的“上游”分支,然后是我工作的任何分支。当我完成我的更改时,我将从上游,将我的分支合并到生成的树中,然后再推回去。例如:

$ bzr init-repo project; cd project 
$ bzr branch bzr+ssh://example.org/srv/bzr/project/trunk trunk 
$ bzr branch trunk my-feature-branch 
$ cd my-feature-branch 
... work, commit; work, commit; ... 
$ cd ../trunk 
$ bzr pull 
$ bzr merge ../my-feature-branch 
... resolve any merge conflicts here, if any ... 
$ bzr ci -m 'Merge in my-feature-branch' 
$ bzr push :parent 

这样做也可以使您的工作与upsteam分支保持分离,直到您准备合并并推送它为止。它确保您的本地分支永远不会被覆盖的机会。

+0

我正在标记我提交的答案是正确的,以帮助任何有同样问题的人在这个问题上磕磕绊绊,但是我提出了这个问题,希望这些人也能阅读。 – 2010-12-11 00:42:26