Recherche…


Ajouter un sous-module

Vous pouvez inclure un autre référentiel Git en tant que dossier dans votre projet, suivi par Git:

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

Vous devez ajouter et valider le nouveau fichier .gitmodules ; Cela indique à Git quels sous-modules doivent être clonés lorsque la git submodule update est exécutée.

Cloner un dépôt Git avec des sous-modules

Lorsque vous clonez un référentiel utilisant des sous-modules, vous devez les initialiser et les mettre à jour.

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

Cela clone les sous-modules référencés et les place dans les dossiers appropriés (y compris les sous-modules dans les sous-modules). Cela équivaut à exécuter git submodule update --init --recursive immédiatement après la fin du clone.

Mise à jour d'un sous-module

Un sous-module référence une validation spécifique dans un autre référentiel. Pour vérifier l'état exact référencé pour tous les sous-modules, exécutez

git submodule update --recursive

Parfois, au lieu d'utiliser l'état référencé, vous souhaitez mettre à jour votre extraction locale vers le dernier état de ce sous-module sur une télécommande. Pour extraire tous les sous-modules du dernier état de la télécommande avec une seule commande, vous pouvez utiliser

git submodule foreach git pull <remote> <branch>

ou utilisez les arguments par défaut de git pull

git submodule foreach git pull

Notez que cela ne fera que mettre à jour votre copie de travail locale. L'exécution de git status indique que le répertoire du sous-module est sale s'il a été modifié à cause de cette commande. Pour mettre à jour votre référentiel afin de référencer le nouvel état à la place, vous devez valider les modifications:

git add <submodule_directory>
git commit

Si vous utilisez git pull pour avoir des conflits de fusion, vous pouvez utiliser git pull --rebase pour git pull --rebase en git pull --rebase sur vos modifications, ce qui diminue le plus souvent les risques de conflit. En outre, il tire toutes les branches vers le local.

git submodule foreach git pull --rebase

Pour vérifier l'état le plus récent d'un sous-module spécifique, vous pouvez utiliser:

git submodule update --remote <submodule_directory>

Définir un sous-module pour suivre une branche

Un sous-module est toujours extrait lors d'un commit spécifique SHA1 (le "gitlink", entrée spéciale dans l'index du rapport parent)

Mais on peut demander de mettre à jour ce sous-module avec la dernière validation d'une branche du dépôt à distance du sous-module.

Plutôt que d’aller dans chaque sous-module, en faisant un git checkout abranch --track origin/abranch, git pull , vous pouvez simplement faire (à partir du dépôt parent) a:

git submodule update --remote --recursive

Comme le SHA1 du sous-module changerait, vous devriez toujours suivre cela avec:

git add .
git commit -m "update submodules"

Cela suppose que les sous-modules étaient:

  • soit ajouté avec une branche à suivre:

      git submodule -b abranch -- /url/of/submodule/repo
    
  • ou configuré (pour un sous-module existant) pour suivre une branche:

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

Retrait d'un sous-module

1.8

Vous pouvez supprimer un sous - module (par exemple the_submodule ) en appelant:

$ git submodule deinit the_submodule
$ git rm the_submodule 
  • git submodule deinit the_submodule supprime l'entrée the_submodule s 'de .git / config. Cela exclut le git submodule update git submodule sync , de la git submodule sync - git submodule foreach et du git submodule foreach appels et supprime son contenu local (source) . En outre, cela ne sera pas affiché comme un changement dans votre référentiel parent. git submodule init et la git submodule update restaureront le sous-module, là encore sans changements dans votre référentiel parent.

  • git rm the_submodule va supprimer le sous-module de l'arborescence. Les fichiers disparaîtront ainsi que l'entrée des sous-modules dans le fichier .gitmodules (source) . Si seulement git rm the_submodule (sans le git submodule deinit the_submodule antérieur, git submodule deinit the_submodule est exécuté, cependant, l'entrée du sous-module dans votre fichier .git / config restera.

1.8

Tiré d' ici :

  1. Supprimez la section pertinente du fichier .gitmodules .
  2. .gitmodules scène les modifications de .gitmodules git add .gitmodules
  3. Supprimez la section correspondante de .git/config .
  4. Exécutez git rm --cached path_to_submodule (pas de barre oblique).
  5. Exécutez rm -rf .git/modules/path_to_submodule
  6. Commit git commit -m "Removed submodule <name>"
  7. Supprimer les fichiers de sous-modules désormais non suivis
  8. rm -rf path_to_submodule

Déplacement d'un sous-module

1.8

Courir:

$ git mv old/path/to/module new/path/to/module
1.8
  1. Modifiez les .gitmodules et modifiez le chemin du sous-module de manière appropriée, puis placez-le dans l'index avec git add .gitmodules .

  2. Si nécessaire, créez le répertoire parent du nouvel emplacement du sous-module ( mkdir -p new/path/to ).

  3. Déplacer tout le contenu de l'ancien vers le nouveau répertoire ( mv -vi old/path/to/module new/path/to/submodule ).

  4. Assurez-vous que Git suit ce répertoire ( git add new/path /to ).

  5. Supprimez l'ancien répertoire avec git rm --cached old/path/to/module .

  6. Déplacez le répertoire .git/modules/ old/path/to/module avec tout son contenu vers .git/modules/ new/path/to/module .

  7. Editez le .git/modules/ new/path/to /config , assurez-vous que l'élément worktree pointe vers les nouveaux emplacements. Dans cet exemple, cela devrait être worktree = ../../../../../ old/path/to/module . En règle générale, il devrait y en avoir deux .. puis des répertoires dans le chemin direct à cet endroit. . Editez le fichier new/path/to/module /.git , assurez-vous que le chemin dans ce fichier pointe vers le nouvel emplacement correct dans le dossier principal du projet .git , donc dans cet exemple gitdir: ../../../.git/modules/ new/path/to/module .

    git status sortie d' git status ressemble à ceci aprè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. Enfin, validez les modifications.


Cet exemple de Stack Overflow , par Axel Beckert



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow