2012-04-02 17 views
8

पर जाएं, मैं अपने रेपो में एक नई शाखा बनाना चाहता हूं जिसमें केवल मास्टर में एक विशिष्ट निर्देशिका से फ़ाइलें शामिल हों और इसका इतिहास दबाएं वह शाखा एक नई भंडार के लिए।गिट केवल एक निर्दिष्ट निर्देशिका और उसके इतिहास के साथ एक नई शाखा बनाएं, फिर नए भंडार

... या कुछ समकक्ष - उदाहरण के लिए शाखा बनाने के बिना किसी नए रेपो में एक निर्देशिका को एक नई रिपॉजिटरी में धक्का देना संभव हो सकता है।

अब तक मुझे लगता है कि निम्नलिखित काम करेंगे, लेकिन मुझे आश्चर्य है कि क्या एक और सुव्यवस्थित तरीका है।

1 - एक खाली शाखा बनाएँ:

git symbolic-ref HEAD refs/heads/<new-branch> 
rm .git/index 
git clean -fdx 

2 - चेकआउट गुरु से एक निर्देशिका:

git checkout master <paths> ... 
git add <paths> ... 
git commit 

3 - नई दूरस्थ करने के लिए पुश शाखा:

git push -u <remote-URL> <new-branch> 

4 - फिर, नए रेपो में, मास्टर के साथ शाखा मर्ज करें:

git checkout -t origin/<new-branch> 
git checkout master 
git merge <new-branch> 
git branch -d afterimage 
git branch -d -r afterimage 

मैं Detach subdirectory into separate Git repository के बराबर कुछ करने का प्रयास कर रहा हूं, लेकिन git filter-branch गड़बड़ के बिना।

+3

... लेकिन उपनिर्देशिका के लिए इतिहास निकालने के लिए आपको वास्तव में * गिट फ़िल्टर-शाखा 'का उपयोग करने की आवश्यकता है। इसके बिना, आपको बस फाइलें मिलती हैं। –

+1

मुझे वास्तव में आपके द्वारा लिंक किए जाने वाले पोस्ट का पालन करने का ब्याज नहीं दिखाई देता है। जिस तरह से आप काम का प्रस्ताव देते हैं, वही कर रहे हैं, लेकिन यह बलपूर्वक बल है, और यह आपके इतिहास या भंडार डेटा को साफ नहीं करेगा। – CharlesB

उत्तर

13

आप git filter-branch का उपयोग क्यों नहीं करना चाहते हैं? यह विशेष रूप से आपके इच्छित कार्यों के लिए बनाया गया है।

git branch subdir_branch HEAD 
git filter-branch --subdirectory-filter dir/to/filter -- subdir_branch 
git push git://.../new_repo.git subdir_branch:master 

यह आपको केवल अपने इतिहास और ज्यादा कुछ नहीं के सभी सहित एक नया भंडार में अपने dir/to/filter की सामग्री, दे देंगे। चूंकि आप केवल नव निर्मित शाखा को फ़िल्टर करेंगे, इसलिए आपके बाकी भंडार को छूटा नहीं जाएगा। आप subdir_branch बाद में हटा सकते हैं।