使用未提交的更改进行更新的Mercurial工作流程?

时间:2011-06-17 18:52:43

标签: eclipse mercurial merge push

所以我已经为我的网站从CVS切换到了mercurial。

我遇到的最大问题是,如果我正在处理一些我不想提交的文件,我只是保存它们。然后我有其他文件要推送到服务器,但是如果有人else已经对存储库进行了更改,我将它们拉下来..它要求我合并或重新绑定..这些选项中的任何一个都会导致我丢失我尚未提交的本地更改。

我已经读过我应该克隆本地主机上每个项目的存储库,并在准备好的时候将其合并到实时中。这不仅看起来乏味,而且需要很长时间,因为它是一个大型存储库。

有更好的解决方案吗?

我希望Mercurial能够看到我没有提交我的更改(即使我已经从服务器上的文件更改了文件),所以它只是忽略了文件。

对此的任何意见将不胜感激。谢谢!

另外,我正在使用hg eclipse插件处理我的文件并从服务器推/拉。

3 个答案:

答案 0 :(得分:3)

我认为

hg shelve是你的朋友。

来自shelve extention(可能 - 见下文)

概述:

  

搁架扩展提供了   shelve命令让你选择   一个部分的变化   你想设置的工作目录   暂时放在一边,粒度   补丁帅哥您可以稍后恢复   搁置的补丁帅哥使用了   不赞成的命令。

     

搁架扩展已经改编   来自Mercurial的RecordExtension。

或者可能是attic extension

  

这个模块处理一组   文件夹.hg /阁楼中的补丁。在   任何时候你可以搁置你的当前   工作副本在那里改变或取消搁置   文件夹中的补丁。

它似乎与shelve扩展具有相同的语法,所以我不确定我使用了哪一个

答案 1 :(得分:2)

我第二个@Sam的回答。但是,如果您更喜欢使用标准Mercurial,则可以使用简单的工作流程

  1. 将您的工作目录更改保存在临时文件中
  2. 将您的工作目录与特定版本同步,然后
  3. 推送,拉动,合并..无论你想做什么,需要干净的工作副本,
  4. 将您的更改从临时文件恢复到工作目录。
  5. 例如:

    $ 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需要一些时间来适应,但值得投资。