Actualizar un submódulo a la última confirmación

Resuelto fat asked hace 13 años • 9 respuestas

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?

fat avatar Nov 19 '11 09:11 fat
Aceptado

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.

Kjuly avatar Nov 19 '2011 02:11 Kjuly

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.

Paul Hatcher avatar Feb 11 '2017 11:02 Paul Hatcher

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 .

Adam Dymitruk avatar Nov 19 '2011 02:11 Adam Dymitruk