2013-02-10 35 views
9

के रूप में बनाएं, मैं अपनी परियोजना के एक सबमिशन के रूप में एक नया संग्रह बनाना चाहता हूं।गिट: रेपो को सबमिशन

आमतौर पर, मैं एक Github रेपो बनाने और उसके बाद एक submodule के रूप में जोड़ने आदेश git submodule add url_to_repo.git

का उपयोग कर वहाँ कहीं और रेपो बनाने के लिए पहले के बिना एक submodule के रूप में सीधे एक नई रेपो बनाने के लिए एक रास्ता है (न तो स्थानीय स्तर पर न ही रिमोट जैसे गिथब पर)?

उत्तर

5

मुझे नहीं पता कि आप कैसे कर सकते हैं: एक सबमिशन परिभाषा द्वारा एक अन्य रेपो से एसएचए 1 (यानी अन्य रेपो को एसएचए 1 निकालने के लिए मूल रेपो के लिए मौजूद होना चाहिए): आपके पास .gitmodules file में संदर्भित होना चाहिए आप माता-पिता रेपो में रहते हैं।

submodules से एक मुख्य भंडार है कि एक विशेष को संदर्भित करता है आंतरिक भंडार है कि पूरी तरह अलग है भीतर वस्तु प्रतिबद्ध में gitlink tree entry तथाकथित बना रहे हैं।

submodule.<name>.url 

एक URL जिससे submodule भंडार क्लोन किया जा सकता है परिभाषित करता है। यह या तो गिट-क्लोन (1) या (यदि यह ./ या ../ से शुरू होता है) सुपरप्रोजेक्ट के मूल भंडार से संबंधित स्थान के लिए एक पूर्ण यूआरएल तैयार हो सकता है।

तो आप स्थानीय रूप से सबमिशन रेपो बना सकते हैं, लेकिन आपको इसे वैसे भी बनाना होगा।

+5

कैसे के बारे में 'Git init। mkdir ए; सीडी ए; गिट इनिट। सीडी ..; गिट सबमिशन जोड़ें ./a ए 'या यह एक बुरा विचार है? – manuels

+0

@ मैनुअल जो मैंने अभी अपने उत्तर में जोड़ा है, लेकिन मुद्दा यह है कि: आपको एक रेपो बनाने के लिए एक रिपोर्टर के रूप में माता-पिता रेपो में संदर्भित करने में सक्षम होना चाहिए। हालांकि, मुझे नहीं लगता कि एक बार आपके माता-पिता रेपो को गिटहब पर धक्का दिया जाता है और दूसरे उपयोगकर्ता द्वारा क्लोन किया जाता है। – VonC

+1

तो यह ठीक है अगर मैं सुपर-रेपो * की निर्देशिका में रेपो * बना देता हूं और * इस डीआईआर को सबमिशन * के रूप में उपयोग करता हूं? – manuels

4

यदि मैं आपको सही समझता हूं तो मैं ग्रहण परियोजनाओं और कार्यक्षेत्रों के लिए अक्सर यही कर रहा हूं। चलो इस संरचना के साथ शुरू करते हैं:

$ find . 
. 
./projekt.txt 
./sub1 
./sub1/sub1.txt 
./sub2 
./sub2/sub2.txt 

पहले submodules और मास्टर प्रारंभ:

$ cd sub1 
$ git init 
$ git add * 
$ git commit -m "init sub1" 
$ cd ../sub2 
$ git init 
$ git add * 
$ git commit -m "init sub2" 
$ cd .. 
$ git init 
$ git status 
# On branch master 
# 
# Initial commit 
# 
# Untracked files: 
# (use "git add <file>..." to include in what will be committed) 
# 
# projekt.txt 
# sub1/ 
# sub2/ 

बजाय नियमित फ़ोल्डरों की submodules के रूप में उन फ़ोल्डर जोड़ने के लिए, बस निम्न आदेश करते हैं, और ./sub की तरह संबंधित पथ का उपयोग बस sub

$ git submodule add ./sub1 
$ git submodule add ./sub2 

अब के बजाय यह

की तरह दिखना चाहिए
$ git status 
# On branch master 
# 
# Initial commit 
# 
# Changes to be committed: 
# (use "git rm --cached <file>..." to unstage) 
# 
# new file: .gitmodules 
# new file: sub1 
# new file: sub2 
# 
# Untracked files: 
# (use "git add <file>..." to include in what will be committed) 
# 
# projekt.txt 

अंत में मूल फ़ोल्डर पर git add * और git commit -m "init parent" करें और वहां आप हैं!

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

1

आसान! कहें submodule_dir उस निर्देशिका का नाम है जिसे आप submodule-ize (मान लीजिए कि यह पहले से ही गिट नियंत्रण में नहीं है)।

cd submodule_dir 
git init 
git add . 
git commit 
# on github, create the new repo, then: 
git remote add origin [email protected]:your_username/your_repo_name.git 
git push -u origin master 
cd .. 
mv submodule_dir submodule_dir_delete_me 
git submodule add [email protected]:your_username/your_repo_name.git submodule_dir 

बाद में (एक बार आप खुश हैं)

rm -rf submodule_dir_delete_me