2013-11-14 8 views
14

ट्रैक करने के लिए गिट सबमिशन मैं आसान विकास के लिए एक संरचना में 10+ रिपॉजिटरीज को एकत्रित करने के लिए गिट सबमिड्यूल का उपयोग करने की कोशिश कर रहा हूं।रिमोट शाखा

यह मॉड्यूल को क्लोन करना और शाखा को चेकआउट करना माना जाता है। इसके बजाए, अलग-अलग हेड मोड में मॉड्यूल की जांच की जाती है।

git clone [email protected]:org/global-repository.git 
git submodule update —init 
cd config-framework 
git status 

$git status 
#HEAD detached at b932ab5 
nothing to commit, working directory clean 

gitmodules फ़ाइलें ठीक

$cat .gitmodules 
[submodule "config-framework"] 
     path = config-framework 
     url = [email protected]:org/config-framework.git 
     branch = MY_BRANCH 

होने के लिए हम चाहते हैं MY_BRANCH शाखा डिफ़ॉल्ट रूप से जाँच की जानी करने के लिए है, न कि अलग सिर से लगता है। हम इसे कैसे प्राप्त कर सकते हैं?

+0

इस तरह से submodules काम करते हैं। मास्टर प्रोजेक्ट एक विशिष्ट प्रतिबद्धता का संदर्भ देता है, शाखा नहीं। – twalberg

उत्तर

18

submodules हमेशा एक detached HEAD mode में चेक आउट किया गया है।

ऐसा इसलिए है क्योंकि एक सबमिशन special entry in the index of the parent repo में संग्रहीत SHA1 चेकआउट करेगा।

इसके अलावा, यदि आप एक submodule शाखा आप .gitmodules में पंजीकृत किया है का पालन करना चाहते हैं, तो आप की जरूरत है:

git submodule update --init --remote 

--remote एक git fetch कर देगा, के साथ साथ नए HEAD की एक चेकआउट।
हां, यहां तक ​​कि चेकआउट भी प्रतिबद्ध नहीं होगा, शाखा के नहीं (क्योंकि आपके पास एक सबमिशन में डिफ़ॉल्ट रूप से कोई स्थानीय शाखा नहीं है), इसलिए ... एक पृथक HEAD मोड पर वापस जाएं।
"Git submodules: Specify a branch/tag" पर और देखें।

आप कोशिश कर सकते हैं (परीक्षण नहीं) एक:

git submodule foreach 'git checkout -b $(git config -f /path/to/parent/repo/.gitmodules --get submodule.$path.branch)' 

मैं लाभ तथ्य git submodule foreach '$path' की पहुंच है की ले, superproject को submodule निर्देशिका रिश्तेदार का नाम है।


स्वचालित रूप से (Git 2.0 के लिए commit 23d25e4) में चेक आउट करने के लिए एक submodule के लिए एक शाखा निर्दिष्ट करने के लिए एक प्रयास था .... लेकिन यह उलट गया (commit d851ffb अप्रैल 2 डी 2014)!
यह जल्द ही आ सकता है, लेकिन वर्तमान कार्यान्वयन में नहीं।

+0

सराहना करेगा, अगर आप यहां मेरे संबंधित प्रश्न का उत्तर दे सकते हैं: http://stackoverflow.com/q/25799319/2872891। धन्यवाद! –

1

यदि आपकी योजना एक सबमिशन में योगदान देना है, तो सबसे अच्छा तरीका इसे नियमित गिट रेपो के रूप में अलग से जांचना है। क्या आप अलग-अलग रिमोट के साथ शाखाओं में काम करते हैं। फिर अपने सबमिशन को उस एकल रिमोट पर इंगित करें जिसका आप परीक्षण के लिए उपयोग करना चाहते हैं।

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