2013-11-14 15 views
0

當使用mercurial時,當處理大的變化時,我會做幾個提交(作爲安全點,或與同事分享我的進展)。 當我完成後,我想將我的更改推送到主存儲庫。然而,在我這樣做之前,我會想要做一個「hg pull -u & & hg merge」以獲得自我上次拉動以來發生的更改,並查看我的更改。如何顯示傳出差異而不合並?

因爲我有幾個變更集,所以在每一個上運行hg diff都不是一個好的解決方案。

我試着運行hg diff -c「outgoing()and not merge()」來僅顯示我輸出變更集的差異(沒有合併的變化集,因爲這往往只會增加我想要避免的噪音)。

但是,這對我來說還是不好,因爲mercurial似乎跳過了一些信息,我不明白是什麼原因。請參考以下場景:

全場景:

# 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又名hg diff --change的誤解。它只需一個修訂版本ID,並顯示相對於其左側父版本所做的更改。

你打電話:

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

這將產生多個版本(這是一個修改集),但只使用其中的一個。你基本上看到的輸出:

hg diff --change 120a0b8a0ede 

如果你想要做的是看你所有的在一個差異混爲一談傳出更改你不想--change/-c

如果你考慮一下,revset outgoing()可能包含很多分支的許多變更集,所以把它們全部轉換爲一個比較不一定是可能的。

如果您試圖獲得的視圖是「分支default上的最近一個分支在本地與遠程的default上的最近分支進行比較如何」,則需要知道默認情況下最近一個頭的節點ID,然後在本地你只是運行:

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