2012-09-08 17 views
7

मुझे पता है कि मैं एक Git भंडार की एक निर्देशिका से बाहर एक नया भंडार बना सकते हैं। यहां देखें:मैं एक गिट रिपोजिटरी से दूसरी निर्देशिका में एक निर्देशिका की प्रतिलिपि कैसे बना सकता हूं?

हालांकि, मैं उस निर्देशिका के इतिहास को रखते हुए, एक भंडार से एक निर्देशिका को एक पूरी तरह से अलग भंडार की एक नई निर्देशिका में कैसे कॉपी कर सकता हूं?

अद्यतन: यह है कि इतिहास Git लॉग के साथ दिखाने के लिए संभव है?

+0

गिटहब यूआरएल अब है: https://help.github.com/articles/splitting-a-subpath-out- में एक नए भंडार –

उत्तर

6

आप git filter-branch के साथ ऐसा कर सकता है। असल में आप चाहते हैं:

  1. पहले से मिले लिंक का उपयोग करके, पहले प्रोजेक्ट में उप-पथ को एक नए भंडार में विभाजित करें।
  2. एक अनूठा शाखा पर दूसरी परियोजना के रिमोट को यह पुश।
  3. दूसरा भंडार में उस शाखा लाओ, फिर सही उपनिर्देशिका में सूचकांक फिल्टर इसे करने के लिए git filter-branch का उपयोग करें:

    git filter-branch --index-filter ' 
        git ls-files -sz | 
        perl -0pe "s{\t}{\tnewsubdir/}" | 
        GIT_INDEX_FILE=$GIT_INDEX_FILE.new \ 
         git update-index --clear -z --index-info && 
         mv "$GIT_INDEX_FILE.new" "$GIT_INDEX_FILE" 
    ' HEAD 
    
  4. अंत में, चेकआउट दूसरी परियोजना के master शाखा (या आप कर रहे हैं जो कुछ भी शाखा उपयोग), फिर नई फ़िल्टर वाली शाखा में विलय करें।

वास्तव में एक ऑपरेशन बहुत भयानक नहीं है, सभी ने बताया। जैसा कि अलेक्जेंडरग्लैडश ने टिप्पणियों में नोट किया है, आप चरण 3 और 4 के स्थान पर subtree merging strategy का भी उपयोग कर सकते हैं।

+0

आप चरण 3 और 4 के बजाय एक सबट्री मर्ज कार्यनीति का उपयोग नहीं कर सकता है? –

+0

@AlexanderGladysh हां। आप इसे एक उप-विलय विलय रणनीति के साथ कर सकते हैं। मैंने तदनुसार जवाब संपादित किया। – Christopher

+0

हम्म। मैंने एक उप-विलय विलय रणनीति के साथ जाने का फैसला किया। एक मुद्दा यह है कि उस निर्देशिका पर गिट लॉग केवल अंतिम विलय प्रतिबद्धता को पूरा इतिहास नहीं दिखाता है :(क्या यह अपेक्षित है? – namin

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

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