Mercurial:获得新鲜的副本

dur*_*aid 7 mercurial

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

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

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

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

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

And*_*y S 5

我想你只是在找这个:

hg pull
hg up --clean
Run Code Online (Sandbox Code Playgroud)

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

唯一需要注意的是,如果您已将文件添加到本地存储库,并且尚未提交,则更新后它们将被孤立(保留在原位,但不在存储库中).如果你这样做,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    
Run Code Online (Sandbox Code Playgroud)

这是本地存储库(早期从远程rev 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
Run Code Online (Sandbox Code Playgroud)

执行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    
Run Code Online (Sandbox Code Playgroud)

这些变化对sample.txt已经被消灭了,addedtolocal.txt已被删除,addedtoremote.txt已添加.

  • 如果两个版本之间存在冲突,我就无法工作. (2认同)

jfr*_*how 2

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

[extensions]
mq =
Run Code Online (Sandbox Code Playgroud)

然后您将能够:

hg strip rev
Run Code Online (Sandbox Code Playgroud)

这会将您的变更集删除到不应出现任何合并冲突的程度。但这会影响分支历史记录。但话又说回来,这并不是那么糟糕,如果你保留它们,任何好的未来变更集都会有一个你决定丢弃的祖先。

如果您只是尝试一些东西,那么最好在一个单独的分支中进行,这样以后很容易关闭和放弃。

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

hg --config ui.merge=internal:other merge 
Run Code Online (Sandbox Code Playgroud)

Mercurial 提示和技巧中记录了这一点。