2010-04-19 11 views
117

मैं किसी अन्य शाखा से निर्देशिका में सभी फ़ाइलों को कैसे कॉपी करूं? मैं व्यक्तिगत रूप सेगिट: किसी अन्य शाखा से निर्देशिका में सभी फ़ाइलों की प्रतिलिपि बनाएँ

git checkout master -- dirname/filename 

कर हालांकि द्वारा

git ls-tree master:dirname 

मैं तो फ़ाइलों के सभी कॉपी कर सकते हैं ऐसा करने से उस निर्देशिका में फ़ाइलों के सभी सूची वाइल्डकार्ड का उपयोग अब तक कुल विफल कर दिया गया है सकते हैं। यह कुछ नहीं करता है: हालांकि मुझे लगता है कि मैं ऐसा करने के लिए एक पार्टी स्क्रिप्ट का उपयोग कर सकते हैं

git checkout master -- dirname/*.png 

, वहाँ एक आसान तरीका हो सकता है, सही है?

उत्तर

167

आपके आस-पास पेड़ में फ़ाइलों को स्थानांतरित करने की कोशिश कर नहीं कर रहे हैं के रूप में, तुम सिर्फ निर्देशिका चेकआउट करने के लिए सक्षम होना चाहिए:

git checkout master -- dirname 
+0

का उपयोग कर सकते हैं कि क्या मैं कॉपी की गई फ़ाइलों के लिए प्रतिबद्ध संदेश बनाए रखना चाहता हूं? – totels

+2

@totels, कड़ाई से बोलते हुए फाइलों से जुड़े कोई प्रतिबद्ध संदेश नहीं हैं; प्रतिबद्ध संदेश प्रतिबद्ध वस्तु से जुड़ा हुआ है। यह वही है जो मैं अनुमान लगा रहा हूं कि आप चाहते हैं: 'गिट चेकआउट मास्टर - डायरनाम; गिट जोड़ें dirname; गिट प्रतिबद्ध -सी $ COMMIT_SHA1 --reset-writer; 'जहां '$ COMMIT_SHA1'' branch_a' जैसा हो सकता है और वह प्रतिबद्ध ऑब्जेक्ट होगा जिसमें आपके इच्छित संदेश संदेश होगा। मुझे पता नहीं है कि 'dirname' –

+1

में हालिया परिवर्तन के साथ प्रोग्रामेटिक रूप से प्रतिबद्धता को कैसे निर्धारित किया जाए, इसका बहुत अजीब साइड इफेक्ट है। यह 'dirname' की प्रतिलिपि बनाता है, लेकिन यह 'मास्टर' शाखा के '.gitignore' में मौजूद किसी भी फाइल की प्रतिलिपि बनाता है। कोई विचार क्यों है? – Milimetric

12

अगर वहाँ रास्तों में कोई रिक्त स्थान हैं, और आप रुचि रखते हैं, मैं की तरह केवल विशिष्ट एक्सटेंशन की फाइलों में, आप

git checkout otherBranch -- $(git ls-tree --name-only -r otherBranch | egrep '*.java') 
+2

यह एक दयालु बात है कि गिट सीधे इस फ़ंक्शन का समर्थन नहीं करता है। ओपी की तरह बिल्कुल, मैंने सोचा होगा कि यह 'गिट चेकआउट मास्टर - *। सी' जैसा होगा –

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