2010-01-11 14 views
17

मैं एक बहुत ही सरल कार्य के लिए bzr का उपयोग कर रहा हूं: जीएनयू Emacs के विकास संस्करण प्राप्त करना। शुरुआती bzr branch के बाद, मैं अपना स्थानीय संस्करण अद्यतित रखना चाहता हूं। मैंने bzr pull और bzr merge पर प्रलेखन के बारे में पढ़ा, लेकिन इससे समझ में नहीं आया। मैंने कुछ दिनों के लिए bzr merge की कोशिश की, और पाया कि bzr merge अक्सर अनजान संघर्षों के परिणामस्वरूप हुआ। ध्यान दें कि मैंने कोई स्थानीय परिवर्तन नहीं किया है। bzr pull अनुशंसित तरीका है?bzr pull vs bzr विलय

remote: A --> B --> C --> D 
     \     \ 
     (branch)   (merge) 
      \     \ 
local:  \--> A (no change) \--> why conflicts? 

मैं Git और darcs समझते हैं, लेकिन BzR के बारे में कोई ज्ञान है:

संपादित करें 1 (एक चित्र Chris Conway से चोरी जोड़ा)। गिट या डार्क्स के लिए एनालॉजी बहुत मदद करेंगे।

संपादित 2: update केवल checkout के साथ काम करने की अपेक्षा की है? update को branch में कुछ भी करने की प्रतीत नहीं होती है।

+1

मैं Emacs टैग को निकालने का हूँ और संस्करण नियंत्रण जोड़ने के बाद से यह है कि Emacs खुद के साथ क्या करना अधिक है। –

उत्तर

35

ध्यान दें कि मैंने कोई स्थानीय परिवर्तन नहीं किए हैं। bzr pull अनुशंसित तरीका है?

हां, ऐसा लगता है कि bzr pull आपके उपयोग के लिए उचित आदेश है। pull एक दूरस्थ स्रोत शाखा लेता है और पुराने संशोधन में स्थानीय गंतव्य शाखा में से किसी भी परिवर्तन की प्रतिलिपि बनाता है। (मैं "दूरस्थ" और "स्थानीय" यहाँ का उपयोग "स्रोत" और मतलब "गंतव्य।" कोई भी दो शाखाओं करना होगा, यहां तक ​​कि दो स्थानीय शाखाओं।)

remote: A --> B --> C --> D 
     \     \ 
     (branch)   (pull) 
      \     \ 
local:  \--> A (no change) \--> D 

एक pull तभी काम करता है दो शाखाओं हेवन ' टी अलग हो गया, यानी, यदि गंतव्य का संशोधन स्रोत का पुराना संशोधन है। push सिर्फ विपरीत ऑपरेशन है: यह स्थानीय शाखा में पुराने संशोधन में रिमोट शाखा में परिवर्तन की प्रतिलिपि बनाता है।

remote: A  (no change)  --> C 
     \     /
     (branch)    (push) 
      \    /
local:  \--> A --> B --> C 

एक merge प्रयोग किया जाता है जब आप किसी स्थानीय शाखा है, जो दूरदराज के शाखा से अलग है में परिवर्तन की प्रतिलिपि बनाना चाहते।

remote: A --> B --> C --> D 
     \     \ 
     (branch)   (merge) 
      \     \ 
local:  \--> A --> X --> Y --> Z 

यहाँ, ZD से परिवर्तन और Y से सभी परिवर्तनों को भी शामिल है। इस मामले में pull संभव नहीं है। ध्यान दें कि नए मर्ज किए गए संशोधन को सहेजने के लिए merge के बाद आपको commit अवश्य होना चाहिए, जबकि एक पुल स्वचालित रूप से शाखा को सहेजे गए संशोधन बिंदु पर लाता है।

checkout आपको सीवीएस/एसवीएन के समान मोड में बीजीआर का उपयोग करने की अनुमति देता है: स्थानीय शाखा रिमोट शाखा से "संलग्न" होगी; commit एस स्वचालित रूप से push एड होगा; अगर रिमोट शाखा अलग हो गई है, तो प्रतिबद्धता असफल हो जाएगी; एक update "संलग्न" दूरस्थ शाखा से केवल merge है।

+0

नाइस असीसी कला, धन्यवाद। मेरे लिए अस्पष्ट क्या है, इसलिए कोई विलय क्यों नहीं होता है, भले ही 'विलय' संघर्ष का कारण बनता है? –

+2

क्या आपको पहले 'विलय' पर भी संघर्ष मिलते हैं, या केवल एक बार से अधिक बार विलय करने के बाद ही? क्या आप प्रत्येक 'विलय' के बाद 'प्रतिबद्ध' करते हैं? विलय करने वाला एल्गोरिदम जटिल है, और यह बिना किसी संघर्ष के हल और हल नहीं कर सकता है। –

+2

बाद में मैंने एक से अधिक बार विलय किया है। प्रत्येक 'विलय' के बाद मैंने 'प्रतिबद्ध' नहीं किया। यह सब अब समझ में आता है। –

4

विलय दो अलग-अलग शाखाओं को विलय करने के लिए है, प्रतियां (स्थानीय और दूरस्थ) नहीं। पुल का उपयोग करें।

1

$ bzr help pull

उद्देश्य: एक और शाखा के एक आईने में इस शाखा कर दें।

- ओवरराइट शाखाओं के बीच मतभेदों को अनदेखा करें और बिना शर्त के ओवरराइट करें।

यदि आप अपने स्थानीय परिवर्तनों को प्रतिस्थापित करना चाहते हैं और दूरस्थ शाखा से मेल खाने के लिए अपनी शाखा चाहते हैं, तो पुल - ओवरराइट का उपयोग करें। यदि दो शाखाएं अलग हो गई हैं तो यह भी काम करेगी।

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

$ bzr pull --overwrite

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