Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Version control 为什么';Mercurial是否可以轻松忽略合并中未提交的文件?_Version Control_Mercurial - Fatal编程技术网

Version control 为什么';Mercurial是否可以轻松忽略合并中未提交的文件?

Version control 为什么';Mercurial是否可以轻松忽略合并中未提交的文件?,version-control,mercurial,Version Control,Mercurial,我不明白这里有什么吗?我没有提交这些文件。它们不应该存在于任何变更集中。虽然我非常感谢Mercurial为保留我所做的任何工作而做出的努力,但我可能希望保留这些工作,为什么Mercurial的明智设计选择不是: a) 如果您记得在提交其他文件中的更改之前拉动/更新,请按照常规流程忽略它们 或 b) 询问用户是否希望覆盖这些文件;如果不希望,则说明如何与适当的参数合并,这些参数告诉Mercurial忽略其中包含未提交更改的文件 我们是如何做到的: c) 拒绝做任何强迫用户使用谷歌的黑客解决方案来解

我不明白这里有什么吗?我没有提交这些文件。它们不应该存在于任何变更集中。虽然我非常感谢Mercurial为保留我所做的任何工作而做出的努力,但我可能希望保留这些工作,为什么Mercurial的明智设计选择不是:

a) 如果您记得在提交其他文件中的更改之前拉动/更新,请按照常规流程忽略它们

b) 询问用户是否希望覆盖这些文件;如果不希望,则说明如何与适当的参数合并,这些参数告诉Mercurial忽略其中包含未提交更改的文件

我们是如何做到的:

c) 拒绝做任何强迫用户使用谷歌的黑客解决方案来解决流行的版本控制系统完全无法考虑的问题,有时我们会忘记在提交之前拉/更新,而我们大多数人(不幸的是)都有大量的配置文件,我们永远不想提交


我不明白是什么?为什么是这样的?既然这样做是有原因的,为什么一开始就没有“duh”方法将这些文件设为禁区?我在这里有点发火,但我有理由去理解。在这里,什么样的胜利还没有被理解,使得这种尴尬变得必要?

如果不知道您是如何使用Mercurial的,我们只能猜测到底发生了什么。您的主要问题似乎是,为什么没有一种简单的方法使Mercurial忽略未提交的更改,其次,为什么我们必须在合并之前提交更改

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

如果您的计划是在合并时丢失任何本地更改,那么您只需首先删除任何本地更改,您可以按照Mercurial帮助执行干净的更新:
hg update--clean.

至于第一个问题,有一种非常简单的方法可以忽略不希望存储在存储库中的内容,那就是使用
.hgignore
文件指定这些文件。您提到,你们中的大多数人“有很多配置文件我们永远不想提交”,这正是
.hgignore
文件的目的。Mercurial将忽略这些文件,并且永远不会提交它们(除非您显式地添加它们)。所以,如果你改变了它们,它们仍然会被Mercurial忽略,一切都会运行得非常好。需要注意的是,如果存储库已经跟踪了一个文件,那么忽略它就太晚了

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

你的最后一个问题是“我不明白是什么?”。虽然我不想听起来很苛刻,但您的问题表明您“不了解”Mercurial应该如何配置和使用。您需要花一些时间阅读诸如
.hgignore
之类的功能,也许还需要看看其他人是如何使用Mercurial的,以及他们的工作流程。这是一个很好的地方,包括合并(Ch2)、文件忽略(Ch7)等内容。即使对于一个经验丰富的善变用户来说,这也是一本不错的读物


我希望这能有所帮助。

不,不,我是在招人批评。这只是一个挫折点,在谷歌搜索时,我看到了许多骇人听闻的解决方案。谢谢你的信息。我会调查的。但是,是的,我绝对认为版本控制应该更直接一点,或者至少有文档可以为您指出正确的方向。正如我所提到的,为存储库设置忽略文件可能为时已晚,除非您随后忘记这些文件,这意味着他们将不再被追踪(尽管他们仍将在历史上)。这本权威性的指南当然值得一读。我们基本上在每一次版本更改时都会克隆一个新的回购协议,所以我应该能够补充一下。