Actualizar un submódulo a la última confirmación
Tengo un proyecto A que es una biblioteca y se usa en un proyecto B.
Ambos proyectos A y B tienen un repositorio separado en github PERO dentro de B tenemos un submódulo de A.
Edité algunas clases en la biblioteca, que está en el repositorio A, presioné el repositorio remoto, por lo que la biblioteca (repositorio A) se actualiza.
Estas actualizaciones no reflejan la "referencia" (el submódulo). El submódulo se refiere a una confirmación anterior... ¿Qué debo hacer para actualizar el submódulo en git?
Ingrese al directorio del submódulo:
cd projB/projA
Extraiga el repositorio de su proyecto A ( no actualizará el estado de git de su proyecto principal B):
git pull origin master
Regrese al directorio raíz y verifique la actualización:
cd ..
git status
Si el submódulo se actualizó antes, se mostrará algo como a continuación:
# Not currently on any branch.
# Changed but not updated:
# (use "git add ..." to update what will be committed)
# (use "git checkout -- ..." to discard changes in working directory)
#
# modified: projB/projA (new commits)
#
Luego, confirme la actualización:
git add projB/projA
git commit -m "projA submodule updated"
ACTUALIZAR
Como señaló @paul, desde git 1.8, podemos usar
git submodule update --remote --merge
para actualizar el submódulo a la última confirmación remota. Será conveniente en la mayoría de los casos.
Desde git 1.8 puedes hacer
git submodule update --remote --merge
Esto actualizará el submódulo a la última confirmación remota. Luego deberá agregar y confirmar el cambio para que se actualice el gitlink en el repositorio principal:
Primero, agregalo
git add project/submodule_proj_name
entonces git cometelo
git commit -m 'gitlink to submodule_proj_name was updated'
el idiota lo empuja
git push
Y luego envíe los cambios, ya que sin esto, la identidad SHA-1 que apunta al submódulo no se actualizará y, por lo tanto, el cambio no será visible para nadie más.
Si actualiza un submódulo y se compromete con él, debe ir al repositorio que lo contiene o a un nivel superior y agregar el cambio allí.
git status
mostrará algo como:
modified:
some/path/to/your/submodule
El hecho de que el submódulo no esté sincronizado también se puede ver con
git submodule
la salida mostrará:
+afafaffa232452362634243523 some/path/to/your/submodule
El signo más indica que su submódulo apunta más adelante de donde el repositorio superior espera que apunte.
simplemente agregue este cambio:
git add some/path/to/your/submodule
y cometerlo:
git commit -m "referenced newer version of my submodule"
Cuando aumente sus cambios, asegúrese de aumentar primero el cambio en el submódulo y luego aumentar el cambio de referencia en el repositorio externo. De esta manera, las personas que actualicen siempre podrán ejecutar correctamente
git submodule update
Puede encontrar más información sobre los submódulos aquí http://progit.org/book/ch6-6.html .