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?
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
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
@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. –