Es posible que desee examinar el soporte de submodule de Git. Un submódulo le permite incrustar un repositorio git dentro de otro repositorio git. Hay alternative solutions para este tipo de cosas, pero no las he usado yo mismo.
Un ejemplo podría tener este aspecto:
$ git clone git://github.com/username/project.git
$ cd project
$ git submodule add git://github.com/username/framework.git framework
$ git commit -m "added framework submodule"
Si va a clonar un repositorio de cartuchos, es necesario utilizar la opción --recursive
:
$ git clone --recursive git://<repository-with-submodules>.git
O, alternativamente, puede clonar con regularidad y luego ejecute:
$ git submodule init
$ git submodule update
Lea el documento vinculado (y git submodule --help
) para más información.
Si se realizan cambios en el submódulo, que traerlos así:
# first update the submodule just like any other git repository
$ cd project/framework
$ git pull
# now you have to record the new commit in the parent repository
$ cd ..
$ git commit -m "updated framework submodule"
El último paso es necesario porque Git mantiene un registro de la específica commit asociado con un submódulo dada (de modo que cuando alguien clona al padre que obtendrá esa versión del submódulo, en lugar de su revisión más actualizada, que podría haber sufrido cambios bruscos que impedirían que funcionara como se esperaba con el repositorio principal). Entonces, si actualiza el submódulo, necesita registrar el nuevo compromiso en el padre.
Si realiza cambios dentro del submódulo framework
, volvería a simplemente git push
como lo haría con cualquier otro repositorio. Entonces tendría que confirmar la nueva revisión en el módulo principal.
Perfecto, así que cuando se realizan cambios en Framework, ¿cómo los incluyo en el proyecto ahora que es un módulo? Además, si realizo cambios en Framework en lugar de project, ¿cómo los vuelvo a insertar en el repositorio de git de Framework? – Justin
He actualizado mi respuesta. – larsks
Una pequeña nota. El submódulo HEAD está separado, por lo que debe tener cuidado al realizar cambios en el submódulo. Crea una rama (o cambia a una rama), realiza los cambios, confirma y luego presiona. – GoZoner