Mercurial:获得新鲜的副本

时间:2011-03-23 14:00:59

标签: mercurial

我有一个本地存储库,我想从远程存储库获取最新的更改。我知道我可以克隆但克隆只适用于新目录。我知道我可以删除本地存储库然后克隆但我想知道如果有Mercurial方式它是如何做的。

编辑:如果存在冲突,hg pull -u不起作用。我不想解决冲突,我只想获得远程仓库的全新副本而不管本地更改。

回答:简答:也许可以做到(见下面的答案),但重新克隆更容易。

答案很长:如果您想从远程获取最新信息并忽略本地更改和提交,那么您将必须克隆到新的本地存储库或删除本地存储库并克隆另一个存储库。这是因为如果您有相互冲突的更改,那么hg将强制您手动解决它们。

哪个好,但我只是想知道是否可以在不删除本地仓库的情况下完成。

5 个答案:

答案 0 :(得分:5)

我认为你只是在寻找这个:

hg pull
hg up --clean

这将从远程存储库中提取最新的一组修订版,然后使用干净的副本更新本地存储库,无论您是否对文件进行了任何更改。没有必要合并。

唯一需要注意的是,如果您已将文件添加到本地存储库,并且尚未提交,则更新后它们将被孤立(保留在原位,但不在存储库中)。如果您执行hg stat,您应该看到它们带有问号。如果添加的文件已提交到本地存储库,Mercurial将在它们之后正确清理。

这是远程存储库(远程rev 6):

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
d----         3/24/2011   2:16 PM            .hg
-a---         3/24/2011   2:16 PM         83 addedtoremote.txt
-a---         3/24/2011   1:56 PM        726 sample.txt    

这是本地存储库(早期从远程版本4克隆),包含已更改和添加的文件(本地版本5):

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
d----         3/24/2011   2:03 PM            .hg
-a---         3/24/2011   2:05 PM          9 sample.txt
-a---         3/24/2011   2:05 PM         58 addedtolocal.txt

执行pull and clean更新后,这是本地存储库(本地版本6):

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
d----         3/24/2011   2:17 PM            .hg
-a---         3/24/2011   2:17 PM         83 addedtoremote.txt
-a---         3/24/2011   2:15 PM        726 sample.txt    

sample.txt的更改已被删除,addedtolocal.txt已被删除且addedtoremote.txt已添加。

答案 1 :(得分:2)

看起来您正在寻找hg strip,它不属于Mercurial核心。它可以通过MqExtension获得。您可以通过在.hgrc或Mercurial.ini文件中添加以下内容来启用它(https://www.mercurial-scm.org/wiki/MqExtension

[extensions]
mq =

然后你将能够:

hg strip rev

这会将您的更改集移除到不应发生任何合并冲突的位置。这会影响分支历史。但话又说回来,这并不是那么糟糕,如果你保留它们,任何好的未来变革都会有一个你决定捣蛋的祖先。

如果你只是尝试一些东西,你最好在一个单独的分支中进行,这个分支很容易被关闭并稍后放弃。

如果您真的希望保留糟糕的变更集,可以将配置选项传递给合并命令,如下所示

hg --config ui.merge=internal:other merge 

Mercurial tips and tricks中记录了这一点。

答案 2 :(得分:1)

从远程仓库中“拉”更改。认为“拉”和“推”是回购之间的变更集交易。

完成后,您必须“更新”来源。

答案 3 :(得分:0)

您可以重新定义修改,最大限度地减少合并的需要。只需致电hg pull --rebase

您必须在rebase

中启用~/.hgrc分机号码
[extensions]
rebase = 

答案 4 :(得分:-1)

由于这是一项常见操作,因此在一个命令中有一个hg pull -uhg mergehg commit的扩展名:

hg fetch

来自hg book

  

启用提取扩展程序很简单。   编辑家中的.hgrc文件   目录,并转到   扩展部分或创建   扩展部分。然后添加一行   只需读取“fetch =”。

[extensions]
fetch =