2011-05-21 9 views
6

Si agrego un submódulo que no existe actualmente, no se agrega información de submódulo a .git/config.¿Por qué agregar un repositorio existente como un submódulo modifica .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 

Sin embargo, si añado un acuerdo de recompra que existe en la actualidad como un submódulo, se añade la url para .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 

habría dado por hecho que en ambos casos, git submodule add sólo habría modificado .gitmodules , y que git submodule init habría actualizado el proyecto .git/config.

¿Por qué se modificó .git/config en el segundo caso pero no el primero? ¿Alguien puede explicar lo racional de este comportamiento?

Respuesta

4

Esto parece extraño. Ese comportamiento se introdujo 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]> 

Actualización: se ha señalado en los comentarios que mi interpretación original de este mensaje de confirmación no tenía ningún sentido, por lo que he eliminado ese texto ahora para evitar confusión para otros.

Como se mencionó en los comentarios a continuación, cdwilson enviado a la lista de correo de git para preguntar acerca de esta incoherencia, y como resultado Jens Lehman está trabajando en una solución - que el hilo se puede encontrar aquí:

+0

Marcos, gracias por el puntero para que cometen (al menos eso se nota este comportamiento es intencional). Sin embargo, todavía estoy confundido cuando dijiste "no se clona hasta que se actualice el submódulo". En el primer caso anterior, 'git submodule add [email protected]: submodule.git' en realidad clona' submodule.git' en el superproyecto. En los ejemplos anteriores, el único comando de submódulo que ejecuté fue 'git submodule add', y en ambos casos terminé con un submodule.git clonado en mi superproyecto. La única diferencia es cómo '.git/config' se ve después, y el caso # 1 también necesita' git submodule init' para registrarse. – cdwilson

+0

Este comportamiento tendría sentido para mí si, en el primer caso, 'git submodule add' no clonaba el repositorio hasta que el submódulo fuera registrado (' git submodule init') y actualizado ('git submodule update'). Sin embargo, dado que el caso n. ° 1 en realidad clona 'submodule.git', y requiere' git submodule init' para registrarse, esperaría que el caso n. ° 2 requiera 'git submodule init' para realizar el registro. Estoy seguro de que hay algo aquí que me falta, pero en este momento no entiendo por qué hay una discrepancia. – cdwilson

+0

@cdwilson: Buen punto, estaba recordando mal el comportamiento de 'git submodule add' en mi apuro por responder la pregunta. Voy a corregir mi respuesta. Podrías preguntar sobre esto en la lista de correo de git para obtener una respuesta correcta. Sospecho que es un error, pero quizás me esté perdiendo algo. –

Cuestiones relacionadas