2011-06-17 23 views
3

所以我已经从CVS切换到我的网站mercurial。Mercurial可用性

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

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

对此有更好的解决方案吗?

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

对此的任何输入将不胜感激。谢谢!

此外,我使用hg eclipse插件来处理我的文件并从服务器上推/拉。

+1

这不是你的问题在这里重复吗? http://stackoverflow.com/questions/6392832/how-to-keep-uncommitted-changes-in-a-local-mercurial-repository-while-still-push –

+0

已经在你的重复问题的评论中提到过,你应该编辑问题而不是发布新问题。请为此或其他问题要求*关闭*。 –

回答

3

hg shelve是我认为你的朋友。

货架扩展提供了 货架命令让你选择的变化 哪些部分在 : - (见下也许)

从概览这是从shelve extention

工作目录,您希望将 暂时放在一边,其中包括修补程序区块的粒度 。您可以稍后使用 unshelve命令恢复已搁置的修补程序段 。

Mercurial的RecordExtension对货架延伸进行了改编 。

或者也许它的attic extension

了一组在文件夹.hg /阁楼 修补软件模块处理。在 任何时候你可以搁置你当前的 工作副本更改那里或不支持 一个补丁从文件夹。

它似乎有相同的语法货架扩展,所以我不能肯定哪一个我用

+0

我很感谢您的回复。现在看看这两者。在eclipse插件中使用这些扩展的经验? – Jason

+0

抱歉,没有。只有命令行:( –

+0

Shelve可以在TortoiseHg中使用,我知道似乎无法找到MercurialEclipse支持的扩展列表 –

2

我第二@萨姆的回答。但是,如果你喜欢使用标准的水银,一个简单的工作流程是

  1. 保存你的工作目录的变化在一个临时文件,
  2. 同步你的工作目录与特定的版本,然后
  3. 推,拉,合并..无论你想要做什么,哪些需要干净的工作副本,并且
  4. 从临时文件中取回你的改变到工作目录中。

例如:

$ 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 
+0

这似乎比CVS中所做的更麻烦,我不得不把它卖给开发我的项目的开发人员,我真的很喜欢继续使用mercurial – Jason

+0

是的,也许这不是告诉Mercurial初学者的事情,但是一旦你真的了解了DVCS的原理,这些工作步骤看起来很自然,不麻烦 - 至少是我的个人经验无论如何,对于一个合并,你必须放弃你的修改,因为合并本身是在工作副本中完成的,这允许你检查并可能在它进行调整之前进行调整犯下的罪行。然而,你这样做,恕我直言*收起*和*回来*变化是没有什么大不了的。 –

1

首先,你在命令行工作,或使用像乌龟?

如果您正在使用命令行,并且已经完成了拉取操作,mercurial不会要求您执行任何操作,因为它只会更新您的本地存储库。

如果您接着进行hg更新并进行本地更改,则应该按照您习惯于CVS的方式进行操作。它将更新到当前分支的顶端,并尝试合并您未完成的更改。有一些注意事项,请参阅http://www.selenic.com/mercurial/hg.1.html#update的官方文档。

此外,为了暂时存储更改,我会推荐MQ over shelve。 Shelve只提供一个存储区域,而MQ提供尽可能多的存储区域。 MQ需要一些习惯,但值得投资。

+0

我实际上使用eclipse插件从我的存储库中推入和拉出。我看到有一个名为Mqueue的扩展名,它允许我进入Qimport,Qinit Qnew Qrefresh Qdelete,我不确定这些中的任何一个是做什么的。 MQ = Mqueue? – Jason

+0

Mqueue应该是相同的,因为所有这些命令名称都是相同的。 –