2011-01-19 2 views
26

में एक नामित शाखा के लिए विशिष्ट दिखाने के लिए कैसे:मान लिया जाये कि मैं दो के साथ एक नामित शाखा foo करता है क, ख diff तेज

 a  b  c 
------o-------o-------o------- # default 
     \   d   e 
     ----------o---------o # branch foo 

मैं एक और ई के बीच अंतर (एक शामिल नहीं देखना चाहते हैं)। मैं निश्चित रूप से संशोधन आईडी का उपयोग कर सकता हूं, लेकिन यह बहुत व्यावहारिक नहीं है। गिट में, कोई सिर्फ गिट diff मास्टर..फू कर सकते हैं। मैं एचजी में ऐसा कैसे कर सकता हूं?

उत्तर

33

आप इसे revsets का उपयोग करके कर सकते हैं।

अपने विशिष्ट उदाहरण में मुझे लगता है कि तुम सिर्फ d और e का उपयोग कर के की एक सूची प्राप्त कर सकते हैं:

hg log -r "branch('foo') - branch('default')" 

जहां कि - के रूप में परिभाषित किया गया है:

"x - y" 
     Changesets in x but not in y. 

करने के लिए एक से diff हो रही है ई के रूप में किया जा सकता है:

hg diff -r "ancestor(default, foo)" -r foo 

यद्यपि संभवतः एक शॉर्टेंड है जिसके लिए मैं नहीं देख रहा हूं।

+0

धन्यवाद, यह कम से कम दे:

hg diff -r <branchname_1>:<branchname_2>

वर्तमान शाखा की नवीनतम प्रतिबद्ध दिखा। लेकिन मैं predicate शाखा (foo) द्वारा थोड़ा परेशान हूँ। एचजी लॉग-आर "शाखा (foo)" जो मैं चाहता हूं वह करता है, बग एचजी diff -r "शाखा (foo)" नहीं करता है। तुम जानते हो क्यों ? –

+1

क्योंकि यह केवल उस predicate द्वारा सभी परिवर्तनों को फ़िल्टर करता है। "शाखा (foo)" वापस आ जाएगी (डी, ई) जो इस संदर्भ में अपेक्षाकृत अर्थहीन है। – Ringding

+2

सही वाक्यविन्यास प्रतीत होता है: 'एचजी लॉग-आर" शाखा ('foo') - शाखा (डिफ़ॉल्ट) "' –

12

यह करने के लिए एक और तरीका है, शाखाओं कि आप पहले से ही डिफ़ॉल्ट विलय कर दिया है के लिए उपयोगी भी है:

hg diff -r "max(ancestors(foo) and branch(default)):foo" 

हालांकि कि एक दर्द का एक गड्ढे हो सकता है, तो मैं ने एक उपनाम सेट की सलाह देते हैं कुछ जोड़ने की तरह:

[alias] 
branchdiff = diff -r "max(ancestors('$1') and branch(default)):'$1'" 
अपने Mercurial.INI/hgrc करने के लिए

है जिसे आप इस तरह उपयोग कर सकते हैं:

hg branchdiff <branch name> 

या

hg branchdiff . 
+0

यह कोड अद्भुत है। – n0nag0n

+0

यह पुनरावृत्ति देखने के लिए बहुत अच्छा होगा कि वास्तव में एचजी ने इस पुनरावृत्ति के साथ वांछित परिणाम कैसे प्राप्त किया है "अधिकतम (पूर्वजों (foo) और शाखा (डिफ़ॉल्ट)): foo" '। – szalski

1

आप केवल वर्तमान शाखा से लॉग चाहते हैं:

एचजी लॉग बी। शाखाओं के बीच

0

diff: यह स्वचालित रूप से करने के लिए एक तरह से

hg log -r .

संबंधित मुद्दे