2011-05-21 5 views
6

यदि मैं एक सबमिशन जोड़ता हूं जो वर्तमान में मौजूद नहीं है, तो .git/config पर कोई सबमिशन जानकारी नहीं जोड़ा गया है।एक मौजूदा रिपो को एक सबमिशन के रूप में क्यों जोड़ता है .git/config को संशोधित करता है?

$ mkdir testing 
$ cd testing 
$ git init 
$ git submodule add [email protected]:submodule.git 
$ cat .git/config 
[core] 
    repositoryformatversion = 0 
    filemode = true 
    bare = false 
    logallrefupdates = true 
    ignorecase = true 

हालांकि, अगर मैं एक रेपो वर्तमान में एक submodule के रूप में मौजूद है कि जोड़ने के लिए, यूआरएल .git/config में जोड़ा जाता है:

$ mkdir testing 
$ cd testing 
$ git init 
$ git clone [email protected]:submodule.git 
$ git submodule add [email protected]:submodule.git 
$ cat .git/config 
[core] 
    repositoryformatversion = 0 
    filemode = true 
    bare = false 
    logallrefupdates = true 
    ignorecase = true 
[submodule "submodule"] 
    url = [email protected]:submodule.git 

मैं मान लिया है कि दोनों ही मामलों में, git submodule add होता केवल .gitmodules संशोधित , और git submodule init ने प्रोजेक्ट के .git/config को अपडेट किया होगा।

क्यों .git/config दूसरे मामले में संशोधित है लेकिन पहले नहीं? क्या कोई इस व्यवहार के लिए तर्कसंगत समझा सकता है?

उत्तर

4

यह अजीब लगता है। यही कारण है कि व्यवहार in this commit पेश किया गया:

commit c2f939170c65173076bbd752bb3c764536b3b09b 
Author: Mark Levedahl <[email protected]> 
Date: Wed Jul 9 21:05:41 2008 -0400 

    git-submodule - register submodule URL if adding in place 

    When adding a new submodule in place, meaning the user created the 
    submodule as a git repo in the superproject's tree first, we don't go 
    through "git submodule init" to register the module. Thus, the 
    submodule's origin repository URL is not stored in .git/config, and no 
    subsequent submodule operation will ever do so. In this case, assume the 
    URL the user supplies to "submodule add" is the one that should be 
    registered, and do so. 

    Signed-off-by: Mark Levedahl <[email protected]> 
    Signed-off-by: Junio C Hamano <[email protected]> 

अद्यतन: आप नीचे दिए गए है कि इस के लिए प्रतिबद्ध संदेश की मेरी मूल व्याख्या कोई मतलब नहीं था टिप्पणी में कहा है, इसलिए मुझे लगता है कि पाठ को हटा दिया है अब से बचने के लिए दूसरों के लिए भ्रम।

नीचे टिप्पणी में उल्लेख किया है, cdwilson Git मेलिंग सूची के लिए तैनात इस विसंगति के बारे में पूछने के लिए, और एक परिणाम के रूप जेन्स लेहमन एक फिक्स पर काम कर रहा है - कि धागा यहां पाया जा सकता:

+0

मार्क में तय किया गया था, के लिए सूचक के लिए धन्यवाद कि प्रतिबद्ध (कम से कम यह पता चलता है इस व्यवहार जानबूझकर है)। हालांकि, मैं अभी भी उलझन में हूं जब आपने कहा "जब तक सबमिशन अपडेट नहीं किया जाता है तब तक इसे क्लोन नहीं किया जाता है"। ऊपर दिए गए पहले मामले में, 'गिट सबमिशन [email protected] जोड़ें: submodule.git' वास्तव में सुपर-प्रोजेक्ट में क्लोन 'submodule.git' क्लोन करें। उपर्युक्त उदाहरणों में, मैंने चलाया गया एकमात्र सबमिशन कमांड 'गिट सबमिशन एड' था, और दोनों मामलों में मैंने अपने सुपर-प्रोजेक्ट में क्लोन submodule.git के साथ समाप्त किया। केवल अंतर यह है कि '.git/config' बाद में कैसा दिखता है, और केस # 1 को पंजीकरण के लिए' गिट सबमिशन इनिट 'की भी आवश्यकता होती है। – cdwilson

+0

यह व्यवहार मुझे समझ में आएगा, अगर पहले मामले में, 'गिट सबमिशन एड' ने रिपॉजिटरी को तब तक क्लोन नहीं किया जब तक कि सबमिशन पंजीकृत नहीं हुआ ('गिट सबमिशन इनिट') और अपडेट किया गया (' गिट सबमिशन अपडेट')। हालांकि, चूंकि उपरोक्त # 1 वास्तव में क्लोन 'submodule.git' क्लोन करता है, और पंजीकरण के लिए 'गिट सबमिशन इनिट' की आवश्यकता होती है, तो मैं पंजीकरण करने के लिए केस # 2 को 'गिट सबमिशन इनिट' की आवश्यकता होगी। मुझे यकीन है कि यहां कुछ ऐसा है जो मुझे याद आ रहा है, लेकिन अभी मुझे समझ में नहीं आता कि एक विसंगति क्यों है। – cdwilson

+0

@cdwilson: अच्छा बिंदु, मैं प्रश्न का उत्तर देने के लिए अपनी गड़बड़ी में 'गिट सबमिशन एड' के व्यवहार का गलत वर्णन कर रहा था। मैं अपना जवाब सही कर दूंगा। आप इसके बारे में उचित उत्तर के लिए गिट मेलिंग सूची पर पूछ सकते हैं - मुझे संदेह है कि यह एक बग है, लेकिन शायद मुझे कुछ याद आ रही है। –

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