2009-03-05 12 views
35

मैं इस तरह एक रेपो के साथ दो प्रत्येक उप-निर्देशिका है,:क्या मैं अपनी मूल निर्देशिका में रेपो के लिए .git निर्देशिका को स्थानांतरित कर सकता हूं?

PPP/ 
|--ABC/ 
| |--.git/ 
| |--AAA/ 
| | BBB/ 
| | CCC/ 
| 
|--DEF/ 
| |--.git/ 
| |--DDD/ 
| |--EEE/ 

और उनमें से एक रेपो में गठबंधन करने के लिए चाहते हैं, तो, मैं निर्देशिका संरचना ग्रहण करेंगे इस तरह होगा:

PPP/ 
|--.git/ 
|--ABC/ 
| |--AAA/ 
| |--BBB/ 
| |--CCC/ 
| 
|--DEF/ 
| |--DDD/ 
| |--EEE/ 

क्या यह सकारात्मक है?

इसके अलावा वर्तमान में कई लोगों को अपनी मशीनों पर रेपोस है। जीवन कितना जटिल बनाता है?

ता।

+0

देखें [कई Git संग्रह का मेल] (http://stackoverflow.com/questions/277029/combining-multiple-git-repositories)। –

उत्तर

42

आप क्या आप इस तरह का वर्णन कर रहे हैं कर सकते हैं:

  1. ले जाएँ एक ABC/ उपनिर्देशिका ABC की सामग्री, और इतिहास को ठीक ताकि ऐसा लगता है कि यह हमेशा किया गया है:

    $ cd /path/to/ABC 
    $ git filter-branch --index-filter \ 
        'git ls-files -s | sed "s-\t-&ABC/-" | 
        GIT_INDEX_FILE=$GIT_INDEX_FILE.new \ 
        git update-index --index-info && 
        mv $GIT_INDEX_FILE.new $GIT_INDEX_FILE' HEAD 
    

    अब आप अपने निर्देशिका संरचनाकी सामग्री के लिए ABC/ABC/your_code

  2. एक ही है:

    $ cd /path/to/DEF 
    $ git filter-branch --index-filter \ 
        'git ls-files -s | sed "s-\t-&DEF/-" | 
        GIT_INDEX_FILE=$GIT_INDEX_FILE.new \ 
        git update-index --index-info && 
        mv $GIT_INDEX_FILE.new $GIT_INDEX_FILE' HEAD 
    

    अब आप अपने निर्देशिका संरचना DEF/DEF/your_code

  3. अंत में है, PPP भंडार बना सकते हैं और दोनों ABC और DEF खींच इसे में:

    $ mkdir /path/to/PPP 
    $ cd /path/to/PPP 
    $ git init 
    $ git pull /path/to/ABC 
    $ git pull /path/to/DEF 
    

    अब आप PPP/ABC/your_code है और PPP/DEF/your_code, साथ सभी इतिहास के साथ।

शायद आपने अपना सहकर्मियों से पूछते हैं, अपने सिस्टम पर पिछले आदेशों को चलाने के लिए हर किसी को सिंक्रनाइज़ किए जाने के लिए करना चाहिए।

नोट: फंकी filter-branch आदेशों come from the man page। :-)

+2

ध्यान दें कि यह केवल एक subproject में मौजूदा जाँच से बाहर शाखा अपडेट करेगा, और केवल नए रेपो में उन शाखाओं खींच लेंगे। –

+12

BTW, एक subdir में सब कुछ ले जाने के लिए वर्तमान रेपो संशोधित करने के लिए एक वैकल्पिक तरीका 'तरह Git फिल्टर शाखा --tag-नाम-फिल्टर बिल्ली कुछ है --index फिल्टर 'SHA = $ (Git लिखने-वृक्ष); आरएम $ GIT_INDEX_FILE && गिट रीड-पेड़ --prefix = एबीसी/$ SHA '- --all'। यह सभी शाखाओं और टैगों को भी फिर से लिख देगा, न केवल सिर। –

+1

फंकी फ़िल्टर-शाखा कमांड गिट के फ़िल्टर-शाखा मैन पेज से है। आप कहना चाहिए कि के रूप में: क) इसे सही ढंग से जिम्मेदार ठहराया जाना चाहिए ख) मैं इस तरह के एक आदेश नहीं चलेंगे सिर्फ इसलिए कि किसी को, यहां तक ​​कि उच्च प्रतिष्ठा के साथ, यह StackOverflow पर पोस्ट। यह जानना कि मैं मैन पेजों से हूं। – mayu

0

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

मेरी सबसे अच्छी सलाह एबीसी और डीईएफ को रखने के लिए एक नया भंडार बनाना होगा, इन दोनों से पुराने रेपो को इतिहास बैकअप रखने और इस नई परियोजना के साथ एक नया इतिहास शुरू करने के लिए।

5

क्या आपको वास्तव में दो मौजूदा भंडारों को एक भंडार में विलय करने की आवश्यकता है, या आप उन्हें समूह बनाना चाहते हैं?

यदि आप उन्हें समूहबद्ध करना चाहते हैं, तो गिट-सबमिशन जो भी आप चाहते हैं वह करेंगे: आप तीन रिपॉजिटरीज़ के साथ समाप्त हो जाएंगे जहां शीर्ष-स्तर एक वर्तमान दो से लिंक है।

एक गाइड के रूप में:

  • आप उन्हें एक ही भंडार में विलय करना चाहिए ताकि यह अब समझ में आता है एक साथ रेपो एक से एक संस्करण का उपयोग करने उन दोनों के बीच युग्मन को बढ़ाने के लिए जा रहे हैं रेपो बी

  • आप submodules का उपयोग करना चाहिए अगर वे कुछ हद तक अलग (यह कभी कभी समझ में आता है अलगाव में से एक पर काम करने के लिए होता है) बने हुए हैं, लेकिन आप उनके साथ मिलकर काम करने में सक्षम होने की सुविधा चाहते हैं (उदाहरण के लिए डाउनलोड के विभिन्न संस्करण दोनों एक बार, चेकपॉइंट ज्ञात-दोनों राज्यों में अच्छे राज्य आदि)।

submodules का उपयोग रिपॉजिटरीज की मौजूदा प्रतियों के साथ समस्याओं से बच जाएगा, क्योंकि इतिहास नहीं बदलता है। उन्हें विलय करने से एक नया इतिहास बन जाएगा और मौजूदा शाखाओं से काम करने वाले लोगों के लिए उनके परिवर्तनों को मर्ज करना कठिन होगा।

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