Git
Des sous-modules
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
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éethe_submodule
s 'de .git / config. Cela exclut legit submodule update
git submodule sync
, de lagit submodule sync
-git submodule foreach
et dugit 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 lagit 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 seulementgit rm the_submodule
(sans legit 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.
Tiré d' ici :
- Supprimez la section pertinente du fichier
.gitmodules
. -
.gitmodules
scène les modifications de.gitmodules
git add .gitmodules
- Supprimez la section correspondante de
.git/config
. - Exécutez
git rm --cached path_to_submodule
(pas de barre oblique). - Exécutez
rm -rf .git/modules/path_to_submodule
- Commit
git commit -m "Removed submodule <name>"
- Supprimer les fichiers de sous-modules désormais non suivis
-
rm -rf path_to_submodule
Déplacement d'un sous-module
Courir:
$ git mv old/path/to/module new/path/to/module
1.8 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
.
Si nécessaire, créez le répertoire parent du nouvel emplacement du sous-module ( mkdir -p new/path/to
).
Déplacer tout le contenu de l'ancien vers le nouveau répertoire ( mv -vi old/path/to/module new/path/to/submodule
).
Assurez-vous que Git suit ce répertoire ( git add new/path /to
).
Supprimez l'ancien répertoire avec git rm --cached old/path/to/module
.
Déplacez le répertoire .git/modules/ old/path/to/module
avec tout son contenu vers .git/modules/ new/path/to/module
.
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
#
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