141 lines
4.5 KiB
Markdown
141 lines
4.5 KiB
Markdown
# Creación de Submódulos Utilizando GIT
|
|
|
|
## **Incorporando un Repositorio Git Existente como Submódulo en el Repositorio Activo**
|
|
|
|
1. Para agregar un nuevo submódulo, utiliza el comando `git submodule add`, especificando la URL absoluta o relativa del proyecto a rastrear. En este ejemplo, dentro del repositorio `oc-monorepo`, se incluye la rama 6.8 de la siguiente manera:
|
|
|
|
```bash
|
|
git submodule add -b 6.8 [ssh://modelo] modules/[nombre_modleo]
|
|
```
|
|
|
|
La salida esperada es similar a:
|
|
|
|
```bash
|
|
Cloning into 'DbConnector'...
|
|
remote: Counting objects: 11, done.
|
|
remote: Compressing objects: 100% (10/10), done.
|
|
remote: Total 11 (delta 0), reused 11 (delta 0)
|
|
Unpacking objects: 100% (11/11), done.
|
|
Checking connectivity... done.
|
|
```
|
|
|
|
Por defecto, los submódulos se agregan a un directorio con el mismo nombre que el repositorio, por ejemplo, "DbConnector". Puedes especificar una ruta diferente al final del comando si deseas ubicarlo en otro lugar.
|
|
|
|
**Nota:** Es crucial elegir cuidadosamente la ruta de los submódulos.
|
|
|
|
Al ejecutar `git status` en este punto, notarás algunas adiciones:
|
|
|
|
```bash
|
|
$ git status
|
|
On branch master
|
|
Your branch is up-to-date with 'origin/master'.
|
|
|
|
Changes to be committed:
|
|
(use "git reset HEAD <file>..." to unstage)
|
|
|
|
new file: .gitmodules
|
|
new file: DbConnector
|
|
```
|
|
|
|
El nuevo archivo `.gitmodules` es una configuración que almacena la relación entre la URL del proyecto y el subdirectorio local. Por ejemplo:
|
|
|
|
```bash
|
|
[submodule "DbConnector"]
|
|
path = DbConnector
|
|
url = https://github.com/chaconinc/DbConnector
|
|
```
|
|
|
|
Asegúrate de que la URL sea accesible para otros al clonar el proyecto.
|
|
|
|
## **Clonación de un Proyecto con Submódulos**
|
|
|
|
Al clonar un proyecto con submódulos, por defecto se obtienen los directorios que contienen submódulos, pero no se descargan los archivos dentro de ellos. Ejecuta:
|
|
|
|
```bash
|
|
git clone --recurse-submodules https://github.com/chaconinc/MainProject
|
|
```
|
|
|
|
Esto inicializará y actualizará automáticamente cada submódulo en el repositorio.
|
|
|
|
Si olvidaste usar `--recurse-submodules` al clonar, puedes combinar los pasos `git submodule init` y `git submodule update` ejecutando `git submodule update --init`. Para inicializar, obtener y cambiar también cualquier submódulo anidado, utiliza `git submodule update --init --recursive`.
|
|
|
|
## **Trabajando en un Proyecto con Submódulos**
|
|
|
|
Ahora que tenemos una copia del proyecto con submódulos, colaboraremos tanto en el proyecto principal como en el submódulo.
|
|
|
|
### **Incorporando Cambios Ascendentes desde el Control Remoto del Submódulo**
|
|
|
|
Para verificar nuevos cambios en un submódulo, ve al directorio y ejecuta `git fetch` y `git merge [la rama ascendente]`. Por ejemplo:
|
|
|
|
```bash
|
|
$ git fetch
|
|
From https://github.com/chaconinc/DbConnector
|
|
c3f01dc..d0354fc master -> origin/master
|
|
$ git merge origin/master
|
|
Updating c3f01dc..d0354fc
|
|
Fast-forward
|
|
scripts/connect.sh | 1 +
|
|
src/db.c | 1 +
|
|
2 files changed, 2 insertions(+)
|
|
```
|
|
|
|
Al ejecutar `git diff`, puedes ver los cambios y confirmarlos si es necesario. Configura `diff.submodule` como "log" para mostrar cambios de submódulos automáticamente.
|
|
|
|
```bash
|
|
git config --global diff.submodule log
|
|
git diff
|
|
```
|
|
|
|
Una forma más sencilla es ejecutar `git submodule update --remote` para actualizar automáticamente los submódulos.
|
|
|
|
```bash
|
|
git submodule update --remote
|
|
```
|
|
|
|
## **Incorporando Cambios Ascendentes desde el Control Remoto del Proyecto Principal**
|
|
|
|
Después de un `git pull`, ejecuta `git submodule update --init --recursive` para actualizar los submódulos.
|
|
|
|
```bash
|
|
git pull
|
|
git submodule update --init --recursive
|
|
```
|
|
|
|
## **Trabajando con un Submódulo**
|
|
|
|
Al ejecutar `git submodule update`, los archivos del submódulo se actualizan, pero el repositorio queda en un estado de "HEAD separado". Para facilitar el acceso y las modificaciones:
|
|
|
|
### **Configuración Inicial**
|
|
|
|
1. Accede al Submódulo:
|
|
|
|
```bash
|
|
cd NombreDelSubmodulo/
|
|
```
|
|
|
|
2. Selecciona una Rama:
|
|
|
|
```bash
|
|
git checkout stable
|
|
```
|
|
|
|
### **Actualización del Submódulo**
|
|
|
|
1. Recupera Cambios Remotos:
|
|
|
|
```bash
|
|
cd ..
|
|
git submodule update --remote --merge
|
|
```
|
|
|
|
Ahora, cualquier cambio local en el submódulo y los cambios remotos se fusionarán automáticamente en tu rama local.
|
|
|
|
2. Para realizar tus cambios, vuelve al directorio del submódulo y haz tus modificaciones. Después, realiza un commit.
|
|
|
|
3. Publica los cambios del submódulo:
|
|
|
|
```bash
|
|
git submodule update --remote NombreDelSubmodulo
|
|
```
|
|
|
|
Esto actualiza y fusiona automáticamente los cambios del submódulo en tu rama local. |