DonConfia_Dev/README.md
2024-12-28 19:51:40 -05:00

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.