2013-11-14 3 views
0

При использовании меркуриальных при работе с большими изменениями я сделаю несколько коммитов (как безопасные точки или поделиться своим успехом со своими коллегами). У меня все закончилось, я хочу внести изменения в основной репозиторий. Прежде чем я это сделаю, я хочу сделать «hg pull -u & & hg merge», чтобы получить изменения, произошедшие со времени моего последнего притяжения, и просмотреть мои изменения.Как отображать исходящий diff без слияний?

Поскольку у меня есть несколько наборов изменений, запуск hg diff по каждому из них не является хорошим решением.

Я попытался запустить hg diff -c «исходящий() и не объединить()», чтобы показывать только diff для моих исходящих наборов изменений (без слияния, поскольку это имеет тенденцию только добавлять шум, который я хочу избежать).

Однако, это все еще не подходит для меня, поскольку ртуть, кажется, пропускает некоторую информацию, и я не понимаю, на каком основании. Пожалуйста, обратитесь к ниже сценарию:

полный сценарий:

# clean working directory 
rm -fr base clone 
#prepare reference repo 
mkdir base; cd base 
hg init 
touch 1.txt 
echo " 1\n2" >>1.txt 
hg add 1.txt 

touch 2.txt 
hg add 2.txt 

hg commit -m"initial commit" 

cd .. 
hg clone base clone 
cd base 
#update ref repo. 
echo "foo" >> 1.txt 
hg commit -m"update file on remote repository" 

#make changes locally 
cd ../clone 
echo "foo" >> 2.txt 
hg commit -m "update initial file" 

#now we are ready to push 
hg pull -u && hg merge 
hg commit -m"merge" 

#actually... 
sed -i -e 's/foo/bar/' 2.txt   
hg commit -m"changed my mind" 
hg out 

changeset: 1:fce14ac089b2 
date:  Thu Nov 14 11:17:08 2013 +0100 
summary:  update initial file 

changeset: 3:1967c50242c0 
parent:  1:fce14ac089b2 
parent:  2:2cdaf75afc6d 
date:  Thu Nov 14 11:17:10 2013 +0100 
summary:  merge 

changeset: 4:120a0b8a0ede 
tag:   tip 
date:  Thu Nov 14 11:18:54 2013 +0100 
summary:  changed my mind 

#try to display my changes 
hg diff -c"outgoing() and not merge()"  
--- a/2.txt Thu Nov 14 11:17:10 2013 +0100 
+++ b/2.txt Thu Nov 14 11:18:54 2013 +0100 
@@ -1,1 +1,1 @@ 
-foo 
+bar 

#only one change here! 
#but 
hg log -r"outgoing() and not merge()" 
changeset: 1:fce14ac089b2 
date:  Thu Nov 14 11:17:08 2013 +0100 
summary:  update initial file 

changeset: 4:120a0b8a0ede 
tag:   tip 
date:  Thu Nov 14 11:18:54 2013 +0100 
summary:  changed my mind 
#is ok 

Так, может кто-нибудь, пожалуйста, объясните мне, почему ртутные скачет fce14ac089b2 целиком набор изменений? То, что я ожидаю, является консолидированной продукцией, то есть:

--- a/2.txt 
+++ b/2.txt 
@@ -1,1 +1,1 @@ 
+bar 

Большое спасибо.

ответ

1

Я думаю, проблема в непонимании того, что hg diff -c aka hg diff --change. Он принимает один идентификатор ревизии и показывает изменения, сделанные этой версией относительно ее левого родителя.

Вы звоните:

hg diff -c"outgoing() and not merge()" 

, который дает несколько версий (это набор изменений), но только используется один из них. Вы по существу видим выход:

hg diff --change 120a0b8a0ede 

Если то, что вы пытаетесь сделать, это увидеть все исходящие изменения сосредоточенных в одном дифф вы не хотите --change/-c.

Если вы думаете об этом, то обрезание outgoing() может содержать много наборов изменений из многих ветвей, поэтому их полное смешивание в одном случае не обязательно возможно.

Если вы хотите получить представление о том, как «самая последняя голова на ветке default локально сравнивается с последней головой на default удаленно» вам нужно знать идентификатор узла последней главы по умолчанию, а затем на месте вы бы просто запустить:

hg diff node_id_of_most_recent_head_on_default_at_remote_site 
0

Это не гарантируется, как я ожидаю, что есть какой-то способ, чтобы иметь изменение графика, где последнее публичное предок не изменение набора вы после , но ...

> hg diff -r "last(ancestors(.) and public())" 
diff -r 5579be654db4 2.txt 
--- a/2.txt Sat Nov 16 11:03:06 2013 +0000 
+++ b/2.txt Sat Nov 16 11:29:34 2013 +0000 
@@ -0,0 +1,1 @@ 
+bar 
Смежные вопросы