3830 votes

Comment puis-je supprimer un sous-module Git ?

Comment puis-je supprimer un sous-module Git ?

Par ailleurs, est-il une raison que je ne peux pas faire tout simplement

?

3583voto

John Douthat Points 28189

Via la page Git sous-module Tutoriel:

Pour supprimer un sous-module, vous devez:

  1. Supprimer la section pertinente de l' .gitmodules le fichier.
  2. Stade de l' .gitmodules change git add .gitmodules
  3. Supprimer la section pertinente de .git/config.
  4. Exécutez git rm --cached path_to_submodule (n slash).
  5. Exécutez rm -rf .git/modules/path_to_submodule
  6. S'engager git commit -m "Removed submodule <name>"
  7. Supprimer la maintenant sans traces sous-module fichiers
    rm -rf path_to_submodule

2488voto

VonC Points 414372

Depuis git1.8.3 (avril 22, 2013):

Il n'y avait pas de Porcelaine façon de dire "je ne suis plus intéressé dans ce sous-module", une fois que vous exprimez votre intérêt dans un sous-module avec "submodule init".
"submodule deinit" est la façon de le faire.

Le processus de suppression utilise également git rm (depuis git1.8.5 octobre 2013).

La suppression de tous les processus serait le suivant:

git submodule deinit asubmodule    
git rm asubmodule
# Note: asubmodule (no trailing slash)
# or, if you want to leave it in your working tree
git rm --cached asubmodule

git rm: Voir commettre 95c16418:

Actuellement à l'aide de "git rm" sur un sous-module supprime le sous-module de travail de l'arbre de la superproject et la gitlink de l'index.
Mais le sous-module de section en .gitmodules est laissé intact, ce qui est un vestige de l'désormais retiré sous-module et peut irriter les utilisateurs (par opposition à la mise en .git/config, cela doit rester comme un rappel que l'utilisateur a montré de l'intérêt dans ce sous-module, donc il va être rempli à nouveau plus tard, quand un ancien commit est vérifié).

Laissez "git rm" aide à l'utilisateur non seulement de retirer le sous-module de l'œuvre arbre, mais en supprimant également le "submodule.<submodule name>" de la .gitmodules de fichiers et d'étape à la fois.


git submodule deinit: Il découle de ce patch:

Avec "git submodule init", l'utilisateur est en mesure d'indiquer à git, il se soucie d'un ou de plusieurs submodules et veut l'avoir renseigné sur le prochain appel à "git submodule update".
Mais actuellement, il n'est pas facile, il pourrait indiquer à git, il ne prend pas en charge un sous-module de plus et veut se débarrasser de son local de travail de l'arbre (à l'exception, il en sait beaucoup sur la sous-module internes et supprime le "submodule.$name.url" réglage de .git/config ensemble du travail de l'arbre lui-même).

Aider les utilisateurs en fournissant un 'deinit' de la commande.
Cela supprime l'ensemble de l' submodule.<name> section d' .git/config , soit pour le sous-module(s) (ou pour tous ceux qui ont été initialisé si '."est donné).
Échouer si les travaux en cours de l'arborescence contient des modifications moins d'y être forcé.
Se plaindre quand pour un sous-module donné sur la ligne de commande le paramètre url ne peut pas être trouvé, en .git/config, mais néanmoins ne pas échouer.

Cela prend en charge si l' (de)étapes d'initialisation (.git/config et .git/modules/xxx)

Depuis git1.8.5, l' git rm prend également soin de la:

  • 'add' étape qui enregistre l'url d'un sous-module dans l' .gitmodules le fichier: il faut supprimer pour vous.
  • le sous-module d'entrée spécial (comme illustré par cette question): le git rm supprime de l'index:
    git rm --cached path_to_submodule (n slash)
    Qui permettra de supprimer ce répertoire stocké dans l'index avec un mode spécial "160000", en le marquant comme un sous-module répertoire racine.

Si vous oubliez cette dernière étape, et essayez d'ajouter ce qui était un sous-module régulier répertoire, vous obtiendrez un message d'erreur comme:

git add mysubmodule/file.txt 
Path 'mysubmodule/file.txt' is in submodule 'mysubmodule'

561voto

Ting L Points 2391

Juste un petit mot. Depuis git 1.8.5.2, vont faire deux commandes :

Comme réponse du @Mark Cheverton correctement souligné, si la deuxième ligne n’est pas utilisée, même si vous avez supprimé le sous-module pour l’instant, le dossier de .git/modules/the_submodule de vestige empêchera le sous-module même d’être rajoutés ou remplacé à l’avenir. En outre, comme @VonC dit, `` va faire la plus grande partie du travail sur un sous-module.

221voto

errordeveloper Points 1649

Étapes simples

  1. Supprime la configuration des entrées:
    git config -f .git/config --remove-section submodule.$submodulepath
    git config -f .gitmodules --remove-section submodule.$submodulepath
  2. Supprimer le répertoire à partir de l'index:
    git rm --cached $submodulepath
  3. S'engager
  4. Supprimez les fichiers inutilisés:
    rm -rf $submodulepath
    rm -rf .git/modules/$submodulepath

Veuillez noter: $submodulepath ne contient pas de leader ou de barres obliques.

Arrière-plan

Lorsque vous effectuez git submodule add, cela ne fait qu'ajouter à .gitmodules, mais une fois que vous avez - git submodule init, il a ajouté .git/config.

Donc, si vous souhaitez supprimer les modules, mais être en mesure de restaurer rapidement, alors ne vient ceci:

git rm --cached $submodulepath
git config -f .git/config --remove-section submodule.$submodulepath

C'est une bonne idée de le faire, git rebase HEAD de la première et de la git commit à la fin, si vous le mettez dans un script.

Voir également la réponse à puis-je unpopulate un Git sous-module?.

84voto

Mark Cheverton Points 1002

Outre les recommandations, j’ai également eu à `` pour pouvoir ajouter un sous-module nouvel portant le même nom (dans mon cas je remplaçais une fourche d’origine)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X