2010-12-07 22 views
8

कहते हैं कि मैं RepoX में दो शाखाओं BranchA और BranchB कहा जाता है की सुविधा देता है। रेपोक्स में SubmoduleY नामक एक सबमिशन भी है।Git: विलय और submodules

BranchA संशोधन पर SubmoduleY है 'एबीसी', BranchB SubmoduleY संशोधन पर 'डीईएफ़' है।

मैं BranchB में BranchA मर्ज करना चाहते हैं, लेकिन मैं 'डीईएफ़' के अपने मूल संशोधन की ओर इशारा करते BranchB के SubmoduleY छोड़ना चाहते हैं।

विधि 1::

  1. चेकआउट BranchB मैं ऐसा करने का कई तरह से देखते हैं।
  2. संशोधन 'एबीसी' में ले जाएँ SubmoduleY वास्तविक मर्ज दर्दरहित (हम अभी submodule स्तर पर किसी भी विलय करने के लिए नहीं करना चाहते हैं) बनाने के लिए।
  3. SubmoduleY के लिए नए संशोधन (हम इसे मर्ज के लिए चल नहीं हो सकता) प्रतिबद्ध होते हैं।
  4. शाखा बी को शाखा बी में मर्ज करें। किसी भी संघर्ष को हल करें।
  5. उप-मॉड्यूल वापस 'def' में संशोधन करें।
  6. सब मॉड्यूल के लिए नया संशोधन प्रतिबद्ध करें।
  7. पुश मुख्य रिपो में परिवर्तन करता है।

विधि 2:

विधि 1 के रूप में एक ही है, लेकिन बजाय चरण 6 करने का, rebase और अतिरिक्त submodule से छुटकारा पाने के कदम से प्रतिबद्ध 3.

दोनों कष्टप्रद कमियां है लगता है:

विधि 1 इतिहास में दो अतिरिक्त काम करता है।

विधि 2 सबमिशन संशोधन के साथ किए गए किसी भी बदलाव को भूल जाता है क्योंकि उनको हटा दिया जाता है। इसलिए, बाद में किसी भी विलय को फिर से कुछ समस्याओं का सामना करना पड़ेगा।

क्या कोई बेहतर तरीका है?

उत्तर

7

आप अपनी विधि 1 पर भिन्नता कर सकते हैं, लेकिन उस प्रतिबद्धता को करें जो --amend के साथ सबमिशन संस्करण (आपके चरण 6 में) में परिवर्तन प्रस्तुत करता है ताकि यह विलय प्रतिबद्धता में सबमिशन की स्थिति को बदल सके। दूसरे शब्दों में, यह होगा:

$ git checkout b 
$ git merge a 
Merge made by recursive. 
example.txt | 1 + 
sY   | 2 +- 
2 files changed, 2 insertions(+), 1 deletions(-) 
create mode 100644 example.txt 
$ cd sY 
$ git checkout def 
[... you get the "detached HEAD" warning ...] 
$ cd .. 
$ git add sY 
$ git commit --amend 

ध्यान दें कि मैं, विलय से पहले विभिन्न संस्करणों में submodules होने से बचने की कोशिश कर रहा परेशान नहीं किया था के रूप में आप अपने प्रश्न में सुझाव दिया। यदि कोई संघर्ष है, तो आप इसे हल करने के लिए def पर सबमिशन को जोड़ना चुन सकते हैं। यदि कोई संघर्ष नहीं होता है, तो ऊपर दिए गए चरणों को ठीक काम करना चाहिए।

+0

अच्छा समाधान! धन्यवाद। – Ben

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