【问题标题】:Mercurial workflow for updating with uncommitted changes?使用未提交的更改进行更新的 Mercurial 工作流程?
【发布时间】:2011-09-17 10:33:51
【问题描述】:

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

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

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

有没有更好的解决方案?

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

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

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

【问题讨论】:

标签: eclipse mercurial merge push


【解决方案1】:

首先,您是使用命令行还是使用 Tortoise 之类的工具?

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

如果您随后进行了 hg 更新并进行了本地更改,它应该会按照您在 CVS 中的习惯进行。它将更新到当前分支的顶端,并尝试合并您未完成的更改。对此有一些警告,请参阅http://www.selenic.com/mercurial/hg.1.html#update 的官方文档。

另外,对于临时存储更改,我建议使用 MQ 而不是搁置。 Shelve 只提供一个存储区域,而 MQ 提供尽可能多的存储区域。 MQ 需要一些时间来适应,但值得投资。

【讨论】:

  • 我实际上是在使用 eclipse 插件从我的存储库中推送和拉取。我看到有一个名为 Mqueue 的扩展,它允许我进行 Qimport、Qinit Qnew Qrefresh Qdelete,我不确定其中的任何一个是做什么的。 MQ = Mqueue 吗?
  • Mqueue 应该相同,因为所有这些命令名称都是相同的。
【解决方案2】:

我支持@Sam 的回答。但是,如果您更喜欢使用标准 Mercurial,一个简单的工作流程是

  1. 将工作目录更改保存在临时文件中,
  2. 将您的工作目录与特定版本同步,然后
  3. push、pull、merge .. 任何你想做的事情,这需要一个干净的工作副本,并且
  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

【讨论】:

  • 这似乎比在 CVS 中所做的要麻烦得多。我必须把它卖给从事我项目的开发人员,我真的很想继续使用 mercurial。
  • 是的,也许这不是告诉 Mercurial 初学者的那种事情,但是一旦你真正掌握了 DVCS 的原理,像这样的工作步骤看起来很自然,而不是繁琐——至少这是我的个人经历。无论如何,对于合并,您肯定必须放弃您的更改,因为合并本身是在工作副本中完成的,这允许您在提交之前检查并可能对其进行调整。不管你怎么做,恕我直言,放弃收回变化并不是什么大不了的事。
【解决方案3】:

hg shelve 我想是你的朋友。

来自shelve extention(也许——见下文)

概览:

搁置扩展提供 搁置命令让您选择 哪些部分发生了变化 您要设置的工作目录 暂时搁置,在粒度上 补丁帅哥。您可以稍后恢复 搁置的补丁大块使用 取消搁置命令。

搁置扩展已被调整 来自 Mercurial 的 RecordExtension。

或者可能是attic extension

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

它似乎和搁置扩展有相同的语法,所以我不确定我用的是哪一个

【讨论】:

  • 感谢您的回复。现在研究这两个。在 hg eclipse 插件中使用这些扩展有什么经验吗?
  • Shelve 可以在 TortoiseHg 中使用,我知道。似乎找不到 MercurialEclipse 支持的扩展列表。
  • 如果您在 Mercurial Eclipse 中右键单击文件夹/文件,您可以转到 Team > Extensions > Mqueue,但我不确定这下的所有命令是什么意思。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-25
  • 1970-01-01
相关资源
最近更新 更多