Buscar..


Añadiendo un submódulo

Puede incluir otro repositorio de Git como una carpeta dentro de su proyecto, seguido por Git:

$ git submodule add https://github.com/jquery/jquery.git

Debe agregar y confirmar el nuevo archivo .gitmodules ; esto le dice a Git qué submódulos deben clonarse cuando se ejecuta la git submodule update .

Clonando un repositorio Git que tiene submódulos

Cuando clones un repositorio que usa submódulos, necesitarás inicializarlos y actualizarlos.

$ git clone --recursive https://github.com/username/repo.git

Esto clonará los submódulos a los que se hace referencia y los colocará en las carpetas apropiadas (incluidos los submódulos dentro de los submódulos). Esto es equivalente a ejecutar git submodule update --init --recursive inmediatamente después de que se termina el clon.

Actualización de un submódulo

Un submódulo hace referencia a un compromiso específico en otro repositorio. Para verificar el estado exacto al que se hace referencia para todos los submódulos, ejecute

git submodule update --recursive

A veces, en lugar de utilizar el estado al que se hace referencia, desea actualizar su pago local al último estado de ese submódulo en un control remoto. Para revisar todos los submódulos hasta el último estado en el control remoto con un solo comando, puede usar

git submodule foreach git pull <remote> <branch>

o usa los argumentos por defecto de git pull

git submodule foreach git pull

Tenga en cuenta que esto solo actualizará su copia de trabajo local. La ejecución git status mostrará el directorio de submódulos como sucio si cambió debido a este comando. Para actualizar su repositorio para hacer referencia al nuevo estado, debe confirmar los cambios:

git add <submodule_directory>
git commit

Es posible que tengas algunos cambios que puedan tener un conflicto de combinación si usas git pull para que puedas usar git pull --rebase para rebobinar tus cambios al máximo, la mayoría de las veces disminuye las posibilidades de conflicto. También tira todas las ramas al local.

git submodule foreach git pull --rebase

Para verificar el último estado de un submódulo específico, puede utilizar:

git submodule update --remote <submodule_directory>

Configuración de un submódulo para seguir una rama.

Un submódulo siempre se retira en un commit específico SHA1 (el "gitlink", entrada especial en el índice del repositorio principal)

Pero se puede solicitar actualizar ese submódulo a la última confirmación de una rama del repositorio remoto de submódulo.

En lugar de ir en cada submódulo, haciendo un git checkout abranch --track origin/abranch, git pull , simplemente puede hacer (desde el repositorio de los padres) a:

git submodule update --remote --recursive

Dado que el SHA1 del submódulo cambiaría, aún tendría que seguir con eso:

git add .
git commit -m "update submodules"

Eso supone que los submódulos fueron:

  • O bien se agrega con una rama a seguir:

      git submodule -b abranch -- /url/of/submodule/repo
    
  • o configurado (para un submódulo existente) para seguir una rama:

      cd /path/to/parent/repo
      git config -f .gitmodules submodule.asubmodule.branch abranch
    

Eliminando un submódulo

1.8

Puede eliminar un submódulo (por ejemplo, el the_submodule ) llamando a:

$ git submodule deinit the_submodule
$ git rm the_submodule 
  • git submodule deinit the_submodule borra la entrada de the_submodule s 'de .git / config. Esto excluye the_submodule de git submodule update , git submodule sync y git submodule foreach calls y elimina su contenido local (fuente) . Además, esto no se mostrará como un cambio en su repositorio principal. git submodule init y git submodule update restaurarán el submódulo, de nuevo sin cambios confiables en su repositorio principal.

  • git rm the_submodule eliminará el submódulo del árbol de trabajo. Los archivos desaparecerán, así como la entrada de los submódulos en el archivo .gitmodules (fuente) . Sin embargo, si solo se git rm the_submodule (sin el git submodule deinit the_submodule anterior git submodule deinit the_submodule se git submodule deinit the_submodule la entrada de submódulos en su archivo .git / config.

1.8

Tomado de aquí :

  1. Elimine la sección relevante del archivo .gitmodules .
  2. Escenario los cambios de .gitmodules git add .gitmodules
  3. Eliminar la sección correspondiente de .git/config .
  4. Ejecute git rm --cached path_to_submodule (sin barra diagonal final).
  5. Ejecute rm -rf .git/modules/path_to_submodule
  6. Commit git commit -m "Removed submodule <name>"
  7. Eliminar los archivos de submódulos ahora sin seguimiento
  8. rm -rf path_to_submodule

Moviendo un submódulo

1.8

Correr:

$ git mv old/path/to/module new/path/to/module
1.8
  1. Edite .gitmodules y cambie la ruta del submódulo adecuadamente, y póngalo en el índice con git add .gitmodules .

  2. Si es necesario, cree el directorio principal de la nueva ubicación del submódulo ( mkdir -p new/path/to ).

  3. Mueva todo el contenido del directorio antiguo al nuevo ( mv -vi old/path/to/module new/path/to/submodule ).

  4. Asegúrese de que Git rastree este directorio ( git add new/path /to ).

  5. Elimine el directorio antiguo con git rm --cached old/path/to/module .

  6. Mueva el directorio .git/modules/ old/path/to/module con todo su contenido a .git/modules/ new/path/to/module .

  7. Edite el archivo .git/modules/ new/path/to /config , asegúrese de que el elemento worktree apunta a las nuevas ubicaciones, por lo que en este ejemplo debería ser worktree = ../../../../../ old/path/to/module . Normalmente debería haber dos más .. luego directorios en la ruta directa en ese lugar. . Edite el archivo new/path/to/module /.git , asegúrese de que la ruta en él apunte a la nueva ubicación correcta dentro de la carpeta principal del proyecto .git , por lo que en este ejemplo gitdir: ../../../.git/modules/ new/path/to/module .

    git status salida de git status se ve así después:

     # On branch master
     # Changes to be committed:
     #   (use "git reset HEAD <file>..." to unstage)
     #
     #       modified:   .gitmodules
     #       renamed:    old/path/to/submodule -> new/path/to/submodule
     #
    
  8. Finalmente, cometer los cambios.


Este ejemplo de Stack Overflow , por Axel Beckert.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow