2009-12-17 12 views
22

मैं कोड समीक्षा करने की आदत में शामिल होने की कोशिश कर रहा हूं, लेकिन विलय प्रक्रिया को कठिन बना रहा है क्योंकि मुझे नहीं पता कि Mercurial से कैसे पूछें "केवल विलय द्वारा पेश किए गए परिवर्तन दिखाएं जो कि इनमें से किसी एक में मौजूद नहीं थे इसके माता-पिता। "Mercurial: मैं केवल मर्ज द्वारा पेश किए गए परिवर्तनों को कैसे देख सकता हूं?

या, थोड़ा और अधिक औपचारिक रूप से (स्टीव Losh करने के लिए धन्यवाद):

मुझे मर्ज कि उसके माता-पिता में से किसी में मौजूद नहीं थे में हर हंक दिखाएँ, और मुझे दोनों में से किसी में हर हंक वर्तमान दिखाने के अपने माता-पिता जो 3.

उदाहरण के लिए, मान लें कि मेरे पास दो फाइलों, ए और बी के साथ एक भंडार है। यदि संशोधन 1 में "ए" बदल दिया गया है, तो "बी" संशोधन 2 (जो एक अलग शाखा पर है) में बदल दिया गया है और इन दो परिवर्तनों को संशोधन 3 में विलय कर दिया गया है, मुझे ऐसा इतिहास मिलेगा जो इस तरह दिखता है:

 @ changeset: 3 
    |\ summary:  Merged. 
    | | 
    | o changeset: 2 
    | | summary:  Changing b 
    | | 
    o | changeset: 1 
    |/ summary:  Changing a 
    | 
    o changeset: 0 
     summary:  Adding a and b

लेकिन अगर मैं परिवर्तन संशोधन 3, hg di -c 3 द्वारा शुरू देखने के लिए पूछना, मर्क्युरियल मुझे एक ही बात दिखाएगा के रूप में अगर मैं परिवर्तन संशोधन 1 में शुरू देखने के लिए कहा, hg di -c 1:

 $ hg di -c 3 
    --- a/a  
    +++ b/a  
    @@ -1,1 +1,1 @@ 
    -a 
    +Change to a 
    $ hg di -c 1 
    --- a/a  
    +++ b/a  
    @@ -1,1 +1,1 @@ 
    -a 
    +Change to a

लेकिन, जाहिर है, यह बहुत उपयोगी नहीं है - इसके बजाय, मैं यह कहना चाहता हूं कि संशोधन 3 (या, यदि एम के दौरान कोई संघर्ष हुआ तो कोई नया बदलाव नहीं हुआ था) erge, मैं केवल उस संघर्ष के लिए संकल्प देखना चाहता हूँ)। कुछ ऐसा:

 $ hg di -c 3 
    $

तो, मैं यह कैसे कर सकता हूं?

ps: मुझे पता है कि मैं अपने भंडार rebase का उपयोग करने में मर्ज किए गए भाग की संख्या को कम कर सकते हैं ... लेकिन है कि मेरी समस्या नहीं है - मेरी समस्या पता लगाना है कि क्या किसी मर्ज के साथ बदल गया था।

+0

यह एक बहुत ही उपयोगी आदेश की तरह लगता है। मैं जवाब की प्रतीक्षा कर रहा हूं। –

+1

इसी तरह का सवाल: [Mercurial में, मर्ज चेंजेट और एक माता-पिता के बीच अन्य माता-पिता से परिवर्तन किए बिना अंतर कैसे दिखें?] (Http://stackoverflow.com/q/4329230/151299) –

+5

मैंने एक लिखना समाप्त कर दिया mergediff प्लगइन: http://mercurial.selenic.com/wiki/MergediffExtension –

उत्तर

12

संक्षिप्त उत्तर: आप किसी भी स्टॉक Mercurial कमांड के साथ ऐसा नहीं कर सकते हैं।

hg diff -c 3 चल रहा है 3 और उसके पहले माता-पिता के बीच के परिवर्तन दिखाएगा - यानी hg merge पर चलने वाले परिवर्तनों में आप बदलाव करेंगे।

यह समझ में आता है जब आप केवल साधारण परिवर्तनों से अधिक शाखाओं के बारे में सोचते हैं। जब आप hg up 1 && hg merge 2 चलाते हैं तो आप Mercurial को बता रहे हैं: "चेंज में परिवर्तन 2 मर्ज करें"।

यदि आप नामित शाखाओं का उपयोग कर रहे हैं तो यह अधिक स्पष्ट है। अपने उदाहरण में परिवर्तन 2 कहें rewrite-ui नामक नामित शाखा पर था। जब आप hg update 1 && hg merge rewrite-ui चलाते हैं तो आप प्रभावी ढंग से कह रहे हैं: "वर्तमान शाखा में rewrite-ui शाखा में सभी परिवर्तनों को मर्ज करें।" जब आप बाद में इस परिवर्तन पर hg diff -c चलाते हैं तो यह आपको default शाखा (या जो भी शाखा 1 चालू होता है) को विलय द्वारा पेश किया गया था, जो समझ में आता है।

अपने प्रश्न से, हालांकि, ऐसा लगता है आप कहने के लिए एक तरीका ढूंढ रहे हैं की तरह:

मुझे इस changeset कि उसके माता-पिता में से किसी में मौजूद नहीं थे में हर हंक शो, और मुझे दिखाओ प्रत्येक हंक अपने माता-पिता में मौजूद है जो में भी मौजूद नहीं है।

यह गणना करने के लिए एक साधारण बात नहीं है (मुझे यह भी यकीन नहीं है कि मुझे अभी विवरण मिला है)। मैं निश्चित रूप से देख सकता हूं कि यह कैसे उपयोगी होगा, हालांकि, यदि आप इसे स्पष्ट रूप से परिभाषित कर सकते हैं तो आप हमारे में से एक को Mercurial योगदानकर्ताओं को समझ सकते हैं जो इसे लागू करने के लिए SO पढ़ते हैं।

+0

एचआरएम, ऐसा लगता है कि मैं पहले स्पष्ट कहना भूल गया था: उत्तर के लिए धन्यवाद। वैसे भी, क्या आपने किसी भी एचजी देवों से सुना है जो कुछ को टक्कर देने में रुचि रखते हैं? या, वैकल्पिक रूप से, क्या आप (या कोई और?) दिमाग अगर मैं उन्हें गड़बड़ कर दूंगा, तो मैं यह समझने की कोशिश करता हूं कि इसे कैसे कार्यान्वित किया जाए? –

+0

मुझे दिलचस्पी होगी क्योंकि मैं काम कर रहा हूं एचजी-समीक्षा एक्सटेंशन के लिए एक "मर्ज डिफ" होना वाकई अच्छा होगा। मैं freenode पर #mercurial में sjl हूँ - मुझे मारा। –

+1

देर से उत्तर के लिए खेद है ... लेकिन मैंने इस तरह की एक प्लगइन लिखना समाप्त कर दिया: http://mercurial.selenic.com/wiki/MergediffExtension –

0

कोड समीक्षा करने के लिए आप वास्तव में उस परियोजना में बदलाव देखना चाहते हैं, जिस पर आप समीक्षा कर रहे हैं। इसके लिए हम प्रत्येक कहानी के लिए एक नई शाखा का उपयोग करते हैं और पुल अनुरोध बनाने से पहले कहानी शाखा में सभी परिवर्तनों को विलय करने के बाद परिवर्तनों को स्पॉटलाइट करने के लिए पुल अनुरोधों का उपयोग करते हैं। हम बिटबकेट पर हमारे कोड की मेजबानी करते हैं और समीक्षा/पुल अनुरोध उपकरण वास्तव में बहुत अच्छे हैं, जो पक्ष के पक्ष में एक तरफ पेश करते हैं।

Pull requests with side-by-side diffs

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

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