2011-05-21 33 views
6

Şu anda olmayan bir alt modül eklerseniz, .git/config'a alt modül bilgisi eklenmez. Şu anda bir altmodülün olarak var olan bir repo eklersenizSubmodule olarak varolan bir repo eklemek neden .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 

Ancak, url .git/config eklenir:

Ben her iki durumda da, git submodule add olurdu farz olurdu

sadece .gitmodules modifiye

$ 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 
ve bu git submodule init projenin .git/config güncelleştirdi.

Neden ikinci durumda değil .git/config değiştirilmiş, ancak ilk değil mi? Birisi bu davranış için rasyonel açıklayabilir mi?

cevap

4

Bu garip görünmüyor. Bunu işlemek mesajın benim orijinal yorumlanması bir anlam ifade etmediğini aşağıda Açıklamalarda belirttiği, o yüzden önlemek için şimdi bu metinleri kaldırdık:

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]> 

Güncelleme: Yani davranış in this commit tanıtıldı diğerleri için karışıklık. aşağıdaki yorum belirtildiği gibi

, cdwilson bu tutarsızlık hakkında sormak git posta listesine gönderilen, ve bunun sonucu olarak Jens Lehmann bir düzeltme üzerinde çalışıyor - bu parçacığı burada bulunabilir:

+0

Mark işaretçi için teşekkürler sabit olduğunu (en azından bu davranışı kasıtlı olduğunu göstermektedir) tamamlama. Ancak, "alt modül güncellenene kadar klonlanmamış" dediğinizde hala kafam karıştı. Yukarıdaki ilk durumda, 'git submodule [email protected] adresini ekleyin: submodule.git 'aslında süper-projeye submodule.git' klonlar. Yukarıdaki örneklerde, çalıştırdığım tek alt mod komutu 'git submodule add 'idi ve her iki durumda da süper projemde klonlanmış bir submodule.git ile bitti. Tek fark, '.git/config'un sonradan göründüğü, ve # 1'in de kayıt yaptırmak için git altmodule init'ine ihtiyaç duymasıdır. – cdwilson

+0

Bu davranış, ilk durumda 'git submodule add' alt modülü kaydedilinceye (' git submodule init ') ve güncellenen ('git submodule update') depoyu klonlamadıysa, benim için anlamlı olur. Ancak, yukarıdaki # 1 örneğinin aslında "submodule.git" klonlaması yapması ve 'git submodule init 'dosyasını kaydettirmesini gerektirmesi durumunda, # 2'nin' git submodule init' gerektirip de kayıt işlemini gerçekleştirmesini beklerim. Eminim ki burada eksik olan bir şey var, ama şu anda neden bir tutarsızlık olduğunu anlamıyorum. – cdwilson

+0

@cdwilson: İyi bir nokta, soruyu cevaplamak için acele etmemde 'git submodule add' davranışını yanlış hatırlatıyordum. Cevabımı düzeltirim. Bunun için uygun bir cevap almak için git e-posta listesinde bunu sorabilirsiniz - bunun bir hata olduğunu sanıyorum, ama belki de bir şeyleri özlüyorum. –

İlgili konular