-2

Am I not understanding something here? I've not committed these files. They shouldn't exist in a change-set anywhere. While I do appreciate Mercurial's efforts to preserve any work I've done that I might want to keep why isn't the sensible design choice on Mercurial's part:

a) Ignore them as per the general process where they effectively are if you remember to pull/update before committing changes in other files.

or

b) Ask user if s/he'd like them overwritten / if no, give directions on how to merge with the proper args that tell Mercurial to ignore files with uncommitted changes in them.

How did we get to:

c) Refuse to do anything forcing user to Google for some hack-ish solution to work around a popular version control system's complete inability to take into account that sometimes we forget to pull/update before commits and most of us (unfortunately) have a ton of config files we never want committed.

What is it I'm not getting here? Why is it all or nothing like this? And given that there's a reason for it, why is there no "duh" way to establish these files as off-limits in the first place? I'm getting semi-ranty here but I am legitimately trying to understand. What's the win here that hasn't sunk in yet that makes such awkwardness necessary?

4

1 回答 1

2

在不了解您如何使用 Mercurial 的更多信息的情况下,我们只能猜测正在发生的事情。您的主要问题似乎是为什么没有一种简单的方法可以让 Mercurial 忽略未提交的更改,其次为什么我们被迫在合并之前提交更改。

首先回答第二个问题,在两个变更集之间执行合并使这些变更集成为新的合并变更集的父级。因此,您的工作目录中不得有预先存在的(未提交的)更改(它必须是“干净的”)。如果您尝试将另一个变更集合并到“脏”工作目录,然后决定撤消该合并而不是提交它,Mercurial 将不知道将工作目录放回什么状态。为什么你不能告诉 Mercurial 忽略合并有变化的文件?因为 Mercurial 不能在每个文件的基础上工作,它是在“变更集”的基础上工作的,其中单个变更集及时保存所有跟踪文件的状态(与 Subversion 之类的不同,

如果您的计划是在合并时丢失任何本地更改,您只需首先删除任何本地更改,您可以通过执行干净更新来完成,根据 Mercurial 帮助:hg update --clean .

至于您的第一个问题,有一种非常简单的方法可以忽略您不想存储在存储库中的内容,那就是使用.hgignore文件来指定这些文件。你提到你们中的大多数人“有大量我们永远不想提交的配置文件”,这正是.hgignore文件的用途。Mercurial 将忽略这些文件,并且它们永远不会被提交(除非您明确添加它们)。因此,如果您更改了它们,Mercurial 仍然会忽略它们,并且一切都会非常顺利。需要注意的是,如果存储库已经跟踪了一个文件,那么忽略它为时已晚。

如果您决定在提交您所做的更改之前确实需要合并(MQ 和 Shelve 扩展浮现在脑海中),那么有一些解决方案,但是您仍然会遇到合并回您所做更改的潜在问题到新的工作目录上,这意味着您将执行两个合并,而不仅仅是一个。

您的最后一个问题是“我没有到达这里是什么?”。虽然我不想听起来刺耳,但您的问题表明您“没有得到”应该如何配置和使用 Mercurial。.hgignore您需要花一些时间来阅读诸如 The Definitive Guide是一个很好的地方,它涵盖了诸如合并 (Ch2)、文件忽略 (Ch7) 等内容。即使对于经验丰富的 Mercurial 用户来说,这也是一本好书。

我希望这会有所帮助。

于 2013-02-05T10:33:40.197 回答