मेरे भंडार का इतिहास इस तरह दिखता है:
A -- B -- C (branch "foo")
-- D (branch "bar")
दो शाखाएं "शिपिंग" दोनों शाखाएं हैं, और अनिवार्य रूप से एक आम बैकएंड के लिए अलग-अलग सीमाएं हैं।
सभी कोड एक शाखा में हुआ करते थे, के साथ foo
या bar
संकलक स्विच द्वारा सुविधाएँ चालू या बंद की जाती हैं, लेकिन मैंने प्रत्येक व्यक्ति के साथ काम करना आसान बना दिया है।
समस्या यह है कि आम "बैकएंड" फाइलें, अपने आप से, शायद एक अलग शाखा होनी चाहिए - और मैं अक्सर चाहता हूं केवल उन आम फाइलों पर काम करें। जिस तरह से मैंने इन शाखाओं को बनाया है, उसके कारण इतिहास थोड़ा खराब हो गया है: शाखा में bar
"अतीत, इसमें से सुविधाएँ हुआ करती थीं foo
.
वर्तमान में, मैं केवल एक शाखा पर परिवर्तन करता हूं और फिर उपयोग करता हूं hg transplant
उसी परिवर्तन को दूसरी शाखा में कॉपी करने के लिए।
इसके बजाय, मैं इस तरह से बदलाव करने में सक्षम होना चाहता हूं:
__ C __ D" (branch "foo")
/ /
A -- B -- D (branch "backend")
-- E -- D"" (branch "bar")
यही है, शाखा पर काम करते हैं backend
, और फिर शिपिंग शाखाओं में से प्रत्येक में (foo
तथा bar
), मैं उपयोग करता हूं hg merge backend
.
वर्णन करने के लिए मेरी वर्तमान स्थिति से जाने के लिए सबसे अच्छा तरीका क्या है? मेरे सोचने का एकमात्र तरीका है:
सभी हटाएं
foo
तथाbar
सुविधाएँ, और उस शाखा का नामbackend
.पुराने को हटाएं
foo
तथाbar
शाखाओं.मैन्युअल रूप से जोड़ें
foo
के लिए सुविधाएँbackend
और उस शाखा का नाम बताइएfoo
, और इसी तरह के लिएbar
.
क्या कोई बेहतर तरीका है?
इसके अलावा, क्या यह करना सही है?
उत्तर:
उत्तर № 1 के लिए 1शाखाओं पर कितने परिवर्तन होते हैं foo
तथा bar
? बैकएंड (प्रत्यारोपित) परिवर्तन सीमांत परिवर्तनों से अलग किए गए हैं?
यदि परिवर्तन कई नहीं हैं, और वे साफ हैं, तो आप ऐसा करना चाह सकते हैं:
C -- 1 -- 2 -- D -- 3 (branch "foo")
/
A -- B ----------- C" -- D" (branch "backend")
C" -- 4 ------ D" --- 5 (branch "bar")
(यहां, बी, सी, डी बैकएंड-संबंधित हैं; 1, 2, 3 फू-संबंधित हैं; 4, 5 बार-संबंधित हैं।)
- यानी, अपना ब्रैक बनाएं backend
के सबसे हाल के सामान्य पूर्वजों पर आधारित है foo
तथा bar
, फिर वहां सभी बैकएंड से संबंधित परिवर्तनों को ट्रांसप्लांट करें। इस बिंदु से, आप "विलय करने में सक्षम होंगे।" backend
या तो शाखा में।
जवाब के लिए 0 № 2
मैंने इसे एक रिपॉजिटरी में कई शाखाओं के बजाय कई रिपॉजिटरी में विभाजित करने के लिए चुना, इस प्रकार है:
मैंने बंद कर दिया
bar
डाली।मैंने मूल रिपॉजिटरी को एक नए रिपॉजिटरी में क्लोन किया
backend
.मैंने सभी को हटा दिया
foo
-संबंधित कोड।मैंने उन परिवर्तनों को मुख्य रिपॉजिटरी में खींच लिया, और फिर तुरंत उनमें से (इसलिए) वापस आ गया
foo
कोड रहता है)। यह मेरा बन गयाfoo
भंडार।मैंने क्लोन किया
backend
एक नए भंडार में भंडारbar
.मैंने अब बंद की गई सभी फाइलों को कॉपी-पेस्ट किया
bar
में शाखाbar
भंडार।
इसने मेरे इतिहास को बनाए रखा foo
, और इतिहास की निरंतरता खो दी bar
(हालांकि सभी इतिहास अभी भी है, अगर मुझे इसकी आवश्यकता थी); और अब दोनों foo
तथा bar
क्लोन हैं, संशोधनों के साथ, के backend
रिपॉजिटरी, जो वास्तव में मैं चाहता था।