所以我已经为我的网站从CVS切换到了mercurial。
我遇到的最大问题是,如果我正在处理一些我不想提交的文件,我只是保存它们。然后我有其他文件要推送到服务器,但是如果有人else已经对存储库进行了更改,我将它们拉下来..它要求我合并或重新绑定..这些选项中的任何一个都会导致我丢失我尚未提交的本地更改。
我已经读过我应该克隆本地主机上每个项目的存储库,并在准备好的时候将其合并到实时中。这不仅看起来乏味,而且需要很长时间,因为它是一个大型存储库。
有更好的解决方案吗?
我希望Mercurial能够看到我没有提交我的更改(即使我已经从服务器上的文件更改了文件),所以它只是忽略了文件。
对此的任何意见将不胜感激。谢谢!
另外,我正在使用hg eclipse插件处理我的文件并从服务器推/拉。
答案 0 :(得分:3)
hg shelve
是你的朋友。
来自shelve extention(可能 - 见下文)
概述:
搁架扩展提供了 shelve命令让你选择 一个部分的变化 你想设置的工作目录 暂时放在一边,粒度 补丁帅哥您可以稍后恢复 搁置的补丁帅哥使用了 不赞成的命令。
搁架扩展已经改编 来自Mercurial的RecordExtension。
或者可能是attic extension
这个模块处理一组 文件夹.hg /阁楼中的补丁。在 任何时候你可以搁置你的当前 工作副本在那里改变或取消搁置 文件夹中的补丁。
它似乎与shelve扩展具有相同的语法,所以我不确定我使用了哪一个
答案 1 :(得分:2)
我第二个@Sam的回答。但是,如果您更喜欢使用标准Mercurial,则可以使用简单的工作流程
例如:
$ hg diff > snapshot.patch # save your uncommited changes
$ hg up -C # get a clean working copy
$ hg pull # do things ..
$ hg merge # .. you need a clean ..
$ hg commit -m "merge" # .. working copy for
$ hg import snapshot.patch # get back your uncommited work
答案 2 :(得分:1)
首先,你是在使用命令行,还是使用像Tortoise这样的东西?
如果您正在使用命令行工作,而且您已经完成了拉动,那么mercurial将不会要求您执行任何操作,因为它只是更新您的本地存储库。
如果您随后进行了hg更新并进行了本地更改,那么它应该从CVS中执行您已经习惯的操作。它将更新到当前分支的提示,并尝试合并您的未完成的更改。有一些注意事项,请参阅http://www.selenic.com/mercurial/hg.1.html#update上的官方文档。
另外,为了暂时存储更改,我建议将MQ放在搁架上。 Shelve仅提供一个存储区域,而MQ提供您需要的任意数量。 MQ需要一些时间来适应,但值得投资。