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 (repo A) se actualiza.
Estas actualizaciones no se reflejan en la "referencia" (el submódulo), el submódulo se refiere a una confirmación previa ... ¿qué debo hacer para actualizar el submódulo en git?
fuente
git submodule update
cuando alguien más actualizó el projA (obtendrás una nueva identificación de confirmación).git push
?git push <remote> <branch>
, por ejemplogit push origin dev
.git submodule update
solo funciona sin marcas cuando se ha extraído una confirmación (en el proyecto B) que actualiza las referencias a los submódulos en cuestión (proyecto A). Para actualizar el proyecto B para hacer referencia a laHEAD
rama de seguimiento remoto para el proyecto A, querrá hacer logit submodule update --remote --merge
que se muestra en la respuesta de Paul Hatcher a continuación.Desde git 1.8 puedes hacer
Esto actualizará el submódulo a la última confirmación remota. Luego deberá confirmar el cambio para que se actualice gitlink en el repositorio principal
Y luego presione 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.
fuente
git commit
todos los demás todavía no lo ven.On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
modified: SubmoduleA (new commits)
modified: SubmoduleB (new commits)
git add
antes de comprometerse.Si actualiza un submódulo y se compromete con él, debe ir al repositorio de nivel superior o que lo contiene y agregar el cambio allí.
mostrará algo como:
El hecho de que el submódulo no esté sincronizado también se puede ver con
la salida mostrará:
El signo más indica que el submódulo apunta hacia el lugar donde el repositorio superior espera que apunte.
simplemente agregue este cambio:
y comprometerlo:
Cuando suba los cambios, asegúrese de subir primero el cambio en el submódulo y luego presione el cambio de referencia en el repositorio externo. De esta manera, las personas que actualicen siempre podrán ejecutar con éxito
Puede encontrar más información sobre submódulos aquí http://progit.org/book/ch6-6.html .
fuente
+
cuando ejecutagit submodule
, asegúrese de haber inicializado e importado los submódulos. Los comandos para eso songit submodule init
ygit submodule update
, respectivamente.Versión de línea única
fuente
Algunas de las otras respuestas recomiendan fusionar / confirmar dentro del directorio del submódulo, lo que IMO puede volverse un poco desordenado.
Suponiendo que se nombra el servidor remoto
origin
y queremos lamaster
rama de los submódulos, tiendo a usar:git submodule foreach "git fetch && git reset --hard origin/master"
Nota: Esto realizará un restablecimiento completo en cada submódulo; si no desea esto, puede cambiar
--hard
a--soft
.fuente
Mi proyecto debería usar el 'último' para el submódulo. En Mac OSX 10.11, git versión 2.7.1, no necesitaba 'entrar' en mi carpeta de submódulos para recopilar sus confirmaciones. Simplemente hice un regular
en el nivel superior, y actualizó correctamente mi submódulo.
fuente
La respuesta de Andy funcionó para mí escapando de $ path:
fuente
'$path'