2011-12-27 9 views
24

Cuando agrego un submódulo de Git a un repositorio Git como este,¿Cómo hacer que el submódulo con HEAD separado se conecte a HEAD real?

git submodule add ssh://server/proj1/ proj1 
git submodule init 
git submodule update 

el submódulo añadido estará en cabeza separada modo. No sé bien qué es eso, pero sé que el submódulo estará vinculado a una revisión específica del repositorio de destino.

No sé cómo funciona en realidad, de todos modos parece que existe una rama proxy allí. Lo resolví cambiando a la rama principal.

cd proj1 
git checkout master 

Ésta cambiará la rama actual CABEZA real maestro, pero esto no actualiza la vinculación. Entonces, si vuelve a clonar todo el repositorio, seguirá vinculado a una revisión anterior.

Si quiero hacer que esté vinculado a la revisión más reciente (HEAD) siempre, ¿qué debo hacer?

+0

Tenga en cuenta que el submódulo ahora puede rastrear una rama. ver mi respuesta editada. – VonC

+0

Encontré este http://stackoverflow.com/a/20797186/1808261 informativo después de llegar a esta publicación. – dtmland

+0

Posible duplicado de [¿Cómo puedo reconciliar el HEAD separado con el maestro/origen?] (Http://stackoverflow.com/questions/5772192/how-can-i-reconcile-detached-head-with-master-origin) –

Respuesta

32

actualizado en Marzo de 2013

Git 1.8.2 añadió la posibilidad de realizar un seguimiento de las ramas.

"git submodule" comenzó a aprender un nuevo modo para se integran con la punta de la rama remota (en oposición a la integración a la confirmación registrada en gitlink del SuperProject).

# add submodule to track master branch 
git submodule add -b master [URL to Git repo]; 

# update your submodule 
git submodule update --remote 

Véase también la Vogella's tutorial on submodules.


Respuesta original (diciembre de 2011)

añadió submódulo estará en modo de cabeza separada

Sí, un submódulo se trata de hacer referencia a cometer un procedimiento específico, y no una rama. Así
:

  • Si usted pago y envío de una confirmación SHA1 (o una etiqueta), que están en un modo cabeza separada.
  • Si pagas una sucursal (como hiciste con la rama master del submódulo), puedes crear otras confirmaciones en la parte superior de esa rama (pero tendrás que volver al repositorio principal para poder confirmar también dicho padre , por lo que necesita para grabar el nuevo submódulo comprometerse que ha creado)

Ver "True nature of submodules" por más.

Si siempre quisiste la última confirmación de otro repositorio, la manera más simple sería fusionarlos (por ejemplo, con la fusión del subárbol).
Consulte "Merge 2 same repository GIT" para obtener los detalles y las referencias.

+0

Nota que los submódulos de git son muy diferentes a svn externos, por ejemplo. Consulte http://stackoverflow.com/questions/3131912/why-are-git-submodules-incompatible-with-svn-externals/3132221#3132221 – VonC

+1

Una nota para más adelante. La 'combinación de subárbol' no era para mí, y creo que' submodule' sería la respuesta si es compatible con el seguimiento. – Eonil

+0

@Eonil, pero admite el seguimiento muy bien, si lo desea también. simplemente, su función principal es registrar una versión fija. – VonC