2010-02-24 17 views
10

मैं निम्नलिखित परियोजना सेटअप:पुन: उपयोग एक Git भंडार के एक भाग

  • Solution A
    • Project 1 (एक हल्के घटक)
    • Project 2 (फ़ाइलों की एक बहुत कुछ शामिल है और Project 1 पर निर्भर करता है)

Solution A एक एकल गिट भंडार है। फिर मैंने एक और समाधान बनाया और पाया कि मैं Project 1 की कार्यक्षमता का पुन: उपयोग और अद्यतन भी कर सकता हूं। तो मेरी दूसरी समाधान शायद इस प्रकार दिखाई देगा:

  • Solution B
    • Project 1 (साझा किया जाना चाहिए!)
    • Project 3 (Project 1 पर निर्भर करता है)।

अब मैं Project 1 एक साझा घटक बनना चाहता हूँ। यही है, हर बार जब मैं समाधान (A या B) से Project 1 का स्रोत कोड बदलता हूं, तो मुझे दूसरे को तदनुसार अपडेट करने की आवश्यकता है।

हो सकता है कि इस submoduleGit की सुविधा कुछ करने के लिए है। हालांकि, इसका उपयोग करने में एकमात्र तरीका Solution B के लिए एक सबमिशन के रूप में पूरे Solution A को निर्दिष्ट करना है। Solution A के विशाल आकार के कारण यह वास्तव में मैं नहीं चाहता हूं। मुझे केवल एक सबमिशन होने के लिए इसका एक छोटा सा हिस्सा चाहिए।

मुझे पता है कि यह svn में संभव है और जैसा मैंने वर्णन किया है ठीक उसी तरह काम करता है: आप svn:externals संपत्ति में बाहरी भंडार के भीतर एक निर्देशिका निर्दिष्ट करते हैं।

उस पर कोई सुझाव? या शायद, मुझे कुछ याद आ रहा है?

उत्तर

7

यह निश्चित रूप से submodules से संबंधित है (देखें nature of submodules)

आपके मामले में, आदर्श समाधान Project1SolutionA से निकालने के लिए होगा गिट रेपो:
How to extract a git subdirectory and make a submodule out of it? देखें।

लेकिन इसमें समाधान ए इतिहास को फिर से लिखना शामिल है, जो एक समस्या है यदि आपने इसे पहले ही प्रकाशित कर लिया है और यदि कुछ लोग इसे खींच रहे हैं।

निष्कर्षण प्रक्रिया के लिए filter-branch का उपयोग करना।

भंडार देखने के लिए फिर से लिखने के लिए के रूप में यदि Project1/ अपनी परियोजना जड़ दिया गया था, और त्यागने अन्य सभी इतिहास:

git filter-branch --subdirectory-filter Project1 -- --all 

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

फिर SolutionB में एक submodule के रूप में Project1 घोषित:

cd SolutionB 
git submodule add /path/to/Project1 Project1 

नोट: यहाँ अगर आप अपने SolutionB प्रकाशित करने की योजना स्थानीय URL का उपयोग न करें!

git commit -m "Add submodules Project1" 
0

स्प्लिट परियोजना 1 अपने स्वयं के भंडार के लिए बाहर, और यह दोनों समाधान एक और समाधान बी के एक submodule बनाने

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