आपने vendor/plugins/open_flash_chart_2
"गिटलिंक" प्रविष्टि के रूप में जोड़ा है , लेकिन इसे कभी भी एक सबमॉड्यूल के रूप में परिभाषित नहीं किया है। प्रभावी रूप से आप आंतरिक सुविधा का उपयोग कर रहे हैं जो git सबमॉड्यूल (gitlink प्रविष्टियाँ) का उपयोग करता है लेकिन आप submodule सुविधा का उपयोग नहीं कर रहे हैं।
आपने शायद ऐसा कुछ किया है:
git clone git://github.com/korin/open_flash_chart_2_plugin.git vendor/plugins/open_flash_chart_2
git add vendor/plugins/open_flash_chart_2
यह अंतिम आदेश समस्या है। निर्देशिका vendor/plugins/open_flash_chart_2
एक स्वतंत्र गिट भंडार के रूप में शुरू होती है। आमतौर पर ऐसे उप-रिपॉजिटरी को नजरअंदाज कर दिया जाता है, लेकिन अगर आप स्पष्ट रूप से इसे जोड़ने के लिए git ऐड को बताते हैं , तो यह एक gitlink प्रविष्टि बनाएगा जो डायरेक्टरी की सामग्री को जोड़ने के बजाय सब-रिपॉजिटरी के HEAD कमिट की ओर इशारा करता है। यह अच्छा हो सकता है अगर git ऐड इस तरह के "सेमी-सबमॉड्यूल्स" बनाने से इनकार कर देगा।
सामान्य निर्देशिकाओं को गिट में पेड़ की वस्तुओं के रूप में दर्शाया जाता है; पेड़ की वस्तुएं उन वस्तुओं को नाम और अनुमति देती हैं, जिनमें वे शामिल होती हैं (आमतौर पर अन्य पेड़ और बूँद वस्तुओं- निर्देशिका और फाइलें, क्रमशः)। सबमॉड्यूल्स को "गिटलिंक" प्रविष्टियों के रूप में दर्शाया गया है; gitlink प्रविष्टियों में केवल submodule के HEAD कमिट का ऑब्जेक्ट नाम (हैश) होता है। एक gitlink की कमिट के लिए "स्रोत रिपॉजिटरी" .gitmodules
फ़ाइल में निर्दिष्ट किया गया है (और सबमॉड्यूल को एक .git/config
बार शुरू करने के बाद फ़ाइल को)।
आपके पास एक प्रविष्टि है जो उस प्रतिबद्ध के लिए स्रोत रिपॉजिटरी को रिकॉर्ड किए बिना, एक विशेष प्रतिबद्ध के लिए इंगित करती है। आप इसे अपने gitlink को एक उचित सबमॉड्यूल में बनाकर, या gitlink को हटाकर "सामान्य" सामग्री (सादे फ़ाइलों और निर्देशिकाओं) के साथ बदल सकते हैं।
इसे एक उचित सबमॉड्यूल में बदल दें
एक ही बिट आप vendor/plugins/open_flash_chart_2
एक सबमॉड्यूल के रूप में ठीक से परिभाषित करने के लिए याद कर रहे हैं एक .gitmodules
फ़ाइल है। आम तौर पर (यदि आपने इसे पहले से नंगे गिटलिंक प्रविष्टि के रूप में नहीं जोड़ा था), तो आप बस उपयोग करेंगे git submodule add
:
git submodule add git://github.com/korin/open_flash_chart_2_plugin.git vendor/plugins/open_flash_chart_2
जैसा कि आपने पाया, यह काम नहीं करेगा यदि पथ पहले से ही सूचकांक में मौजूद है। समाधान अस्थायी रूप से सूचकांक से gitlink प्रविष्टि को हटाने के लिए है और फिर सबमॉड्यूल जोड़ें:
git rm --cached vendor/plugins/open_flash_chart_2
git submodule add git://github.com/korin/open_flash_chart_2_plugin.git vendor/plugins/open_flash_chart_2
यह आपकी मौजूदा उप-रिपॉजिटरी का उपयोग करेगा (यानी यह स्रोत रिपॉजिटरी को फिर से क्लोन नहीं करेगा) और .gitmodules
इस तरह दिखने वाली फाइल को स्टेज करेगा :
[submodule "vendor/plugins/open_flash_chart_2"]
path = vendor/plugins/open_flash_chart_2
url = git://github.com/korin/open_flash_chart_2_plugin.git vendor/plugins/open_flash_chart_2
यह आपके मुख्य भंडार .git/config
( path
सेटिंग के बिना ) में भी समान प्रविष्टि करेगा ।
प्रतिबद्ध करें और आपके पास एक उचित सबमॉड्यूल होगा। जब आप रिपॉजिटरी को क्लोन करते हैं (या गीथहब को धक्का देते हैं और वहां से क्लोन करते हैं), तो आपको सबमॉड्यूल के माध्यम से पुनः आरंभ करने में सक्षम होना चाहिए git submodule update --init
।
इसे प्लेन कंटेंट से बदलें
अगला चरण मानता है कि आपके उप-भंडार के vendor/plugins/open_flash_chart_2
पास कोई स्थानीय इतिहास नहीं है जिसे आप संरक्षित करना चाहते हैं (यानी आप सभी की देखभाल उप-भंडार के वर्तमान कार्यशील पेड़ है, इतिहास नहीं)।
यदि आपके पास उप-रिपॉजिटरी में स्थानीय इतिहास है जिसकी आपको परवाह है, तो आपको .git
नीचे दिए गए दूसरे कमांड में हटाने से पहले उप-रिपॉजिटरी की निर्देशिका का बैकअप लेना चाहिए । (भी विचार Git सबट्री कि बरकरार रखता है नीचे दिए गए उदाहरण उप भंडार के सिर के इतिहास)।
git rm --cached vendor/plugins/open_flash_chart_2
rm -rf vendor/plugins/open_flash_chart_2/.git # BACK THIS UP FIRST unless you are sure you have no local changes in it
git add vendor/plugins/open_flash_chart_2
इस बार निर्देशिका को जोड़ने पर, यह एक उप-रिपॉजिटरी नहीं है, इसलिए फाइलें सामान्य रूप से जोड़ दी जाएंगी। दुर्भाग्य से, चूंकि हमने .git
निर्देशिका को हटा दिया है इसलिए स्रोत रिपॉजिटरी के साथ चीजों को अद्यतित रखने का कोई सुपर-आसान तरीका नहीं है।
आप इसके बजाय सबट्री मर्ज का उपयोग करने पर विचार कर सकते हैं । ऐसा करने से आप आसानी से अपने रिपॉजिटरी (कोई सबमॉड्यूल्स) में फ़ाइलों को "फ्लैट" रखते हुए स्रोत रिपॉजिटरी से परिवर्तनों में आसानी से खींच पाएंगे। थर्ड-पार्टी गिट उपटैब कमांड उप-मर्ज कार्यक्षमता के आसपास एक अच्छा आवरण है।
git rm --cached vendor/plugins/open_flash_chart_2
git commit -m'converting to subtree; please stand by'
mv vendor/plugins/open_flash_chart_2 ../ofc2.local
git subtree add --prefix=vendor/plugins/open_flash_chart_2 ../ofc2.local HEAD
#rm -rf ../ofc2.local # if HEAD was the only tip with local history
बाद में:
git remote add ofc2 git://github.com/korin/open_flash_chart_2_plugin.git
git subtree pull --prefix=vendor/plugins/open_flash_chart_2 ofc2 master
git subtree push --prefix=vendor/plugins/open_flash_chart_2 git@github.com:me/my_ofc2_fork.git changes_for_pull_request
git सबट्री में एक --squash
विकल्प भी होता है, जो आपको स्रोत रिपॉजिटरी के इतिहास को अपने इतिहास में शामिल करने से रोकता है, लेकिन फिर भी आपको अपस्ट्रीम परिवर्तनों में खींचने की सुविधा देता है।