2011-09-25 29 views
3

我使用:Mercurial Distributed SCM (version 1.9.1),我已经做了以下内容:hg update --mq不能正常工作?

D:\code\mqtest>hg init 
D:\code\mqtest>hg qinit -c 
D:\code\mqtest>echo NonQueue > first 
D:\code\mqtest>hg st 
? first 
D:\code\mqtest>hg add first 
D:\code\mqtest>hg commit -m nonqueue 
D:\code\mqtest>hg log 
changeset: 0:2d4bac63616a 
tag:   tip 
user:  Tempos 
date:  Mon Sep 26 00:52:49 2011 +0300 
summary:  nonqueue 

D:\code\mqtest>hg log --mq 
D:\code\mqtest>hg qnew a 
D:\code\mqtest>echo Queue0 > first 
D:\code\mqtest>hg st 
M first 
D:\code\mqtest>hg qref 
D:\code\mqtest>hg qcommit -m "queue 0" 
D:\code\mqtest>echo Queue1 > first 
D:\code\mqtest>hg qref 
D:\code\mqtest>hg qcommit -m "queue 1" 
D:\code\mqtest>echo Queue2 > first 
D:\code\mqtest>hg qref 
D:\code\mqtest>hg qcommit -m "queue 2" 
D:\code\mqtest>hg st 
D:\code\mqtest>hg log --mq 
changeset: 2:38d08315a300 
tag:   tip 
user:  Tempos 
date:  Mon Sep 26 00:53:46 2011 +0300 
summary:  queue 2 

changeset: 1:bb8b7da2e728 
user:  Tempos 
date:  Mon Sep 26 00:53:33 2011 +0300 
summary:  queue 1 

changeset: 0:1ac551a65492 
user:  Tempos 
date:  Mon Sep 26 00:53:22 2011 +0300 
summary:  queue 0 

我试图切换回一个特定版本的MQ:

D:\code\mqtest>hg up -r 0 --mq 
1 files updated, 0 files merged, 0 files removed, 0 files unresolved 
D:\code\mqtest>cat first 
Queue2 

为什么我没有看到队列0的内容?

回答

2

当您更新.hg\patches中的修补程序与hg --mq update时,您将更改mq后面的mq修补程序。换句话说:补丁本身会获得新内容,但不会自动重新应用。

所以,你想要的工作流程是这样做:

> hg qpop -a 
> hg --mq update -r X 
> hg qpush -a 

,你首先删除所有补丁,更新它们看起来像你想要的,然后再应用它们。

hg --mq update这样做对你来说实际上是一个有趣的想法,我知道你不是第一个对两个命令之间缺乏整合感到惊讶的人。

-1

在队列中移动补丁时,您应该使用qpushqpop

tutorial

补丁队列方面其实是相当不错的,以及。例如,对于 示例,您可以在同一时间在 的同一队列中同时处理应用程序的两个不同层( 低层并在其上创建内容),而不会破坏内容。 qpush和qpop将帮助您向上移动 ,同时保持您的更改不同。

+0

但我只有一个补丁,我'qcommit'多次。 – Geo

+1

qpush和qpop从补丁到补丁。 Tempos正在考虑从同一个补丁的版本到版本。这是很深的魔法。 –