Comment supprimer un sous-module Git?
Au fait, y a-t-il une raison pour laquelle je ne peux pas simplement le faire
git submodule rm whatever
?
git
git-submodules
R. Martinho Fernandes
la source
la source
git rm modulename
etrm -rf .git/modules/modulename
.git/config
. La réponse acceptée montre la manière la plus récente de supprimer complètement un sous-module. Il est également expliqué plus succinctement dans cette réponse: stackoverflow.com/a/36593218/1562138Réponses:
Depuis git1.8.3 (22 avril 2013) :
Le processus de suppression utilise également
git rm
(depuis git1.8.5 octobre 2013).Sommaire
Le processus de suppression en 3 étapes serait alors:
Explication
rm -rf
: Ceci est mentionné dans la réponse de Daniel Schroeder et résumé par Eonil dans les commentaires :git rm
: Voir commit 95c16418 :git submodule deinit
: Il découle de ce patch :Cela prend soin si les étapes de (dé) initialisation (
.git/config
et.git/modules/xxx
)Depuis git1.8.5, le
git rm
prend également en charge:add
' étape qui enregistre l'url d'un sous-module dans le.gitmodules
fichier: il faut le supprimer pour vous.git rm --cached path_to_submodule
(pas de barre oblique de fin)Cela supprimera ce répertoire stocké dans l'index avec un mode spécial "160000", le marquant comme un répertoire racine de sous-module .
Si vous oubliez cette dernière étape et essayez d'ajouter ce qui était un sous-module en tant que répertoire normal, vous obtiendrez un message d'erreur comme:
Remarque: depuis Git 2.17 (Q2 2018), le sous-module git deinit n'est plus un script shell.
C'est un appel à une fonction C.
Voir commit 2e61273 , commit 1342476 (14 janvier 2018) par Prathamesh Chavan (
pratham-pc
) .(Fusionné par Junio C Hamano -
gitster
- en commit ead8dbe , 13 févr.2018 )la source
submodule deinit
?.gitmodules
devrait être ok, mais je revérifierais tout avec le.git
répertoire (c'est-à-dire la configuration locale , dans votre référentiel local: ce n'est pas modifié par agit pull
).gitmodules
entrée et la suppression de l'entrée spéciale dans l'index, et que vous appuyez sur ce dépôt, d'autres peuvent le retirer et ce sous-module disparaîtra.git rm submodule
fait exactement ce que vous voulez, comme d'autres l'ont déjà dit.Via la page Tutoriel du sous-module Git :
Pour supprimer un sous-module, vous devez:
.gitmodules
fichier..gitmodules
changements:git add .gitmodules
.git/config
.git rm --cached path_to_submodule
(pas de barre oblique de fin)..git
répertoire du sous-module :rm -rf .git/modules/path_to_submodule
git commit -m "Removed submodule <name>"
rm -rf path_to_submodule
Voir aussi : étapes alternatives ci-dessous .
la source
git submodule rm
supprime simplement l'enregistrement du sous-module et serait surprise si la commande supprimait également le référentiel local. Tout changement local serait irrémédiablement perdu. Et peut-être qu'une autre personne penserait que seuls les fichiers seraient supprimés.Juste une note. Depuis git 1.8.5.2, deux commandes feront l'affaire:
Comme l'a correctement souligné la réponse de @Mark Cheverton, si la deuxième ligne n'est pas utilisée, même si vous avez supprimé le sous-module pour l'instant, le dossier .git / modules / the_submodule restant empêchera le même sous-module d'être ajouté ou remplacé à l'avenir . En outre, comme l'a mentionné @VonC, la
git rm
plupart du travail sera effectué sur un sous-module.--Mise à jour (07/05/2017) -
Juste pour clarifier,
the_submodule
est le chemin relatif du sous-module à l'intérieur du projet. Par exemple, c'estsubdir/my_submodule
si le sous-module se trouve dans un sous-répertoiresubdir
.Comme indiqué correctement dans les commentaires et autres réponses , les deux commandes (bien que fonctionnellement suffisantes pour supprimer un sous-module), laissent une trace dans la
[submodule "the_submodule"]
section.git/config
(à partir de juillet 2017), qui peut être supprimée à l'aide d'une troisième commande:la source
.git/config
. Voir stackoverflow.com/a/36593218/1562138 pour la méthode complète de suppression d'un sous-module.git init && git submodule add <repository> && git rm <name>
laisse l'.git/config
entrée et le.git/modules/<name>
répertoire et son contenu. Peut-être n'avez-vous pas initialisé le sous-module avant de le retirer?La majorité des réponses à cette question sont obsolètes, incomplètes ou inutilement complexes.
Un sous-module cloné à l'aide de git 1.7.8 ou plus récent laissera au plus quatre traces de lui-même dans votre dépôt local. Le processus de suppression de ces quatre traces est donné par les trois commandes ci-dessous:
la source
Étapes simples
git config -f .git/config --remove-section submodule.$submodulename
git config -f .gitmodules --remove-section submodule.$submodulename
git rm --cached $submodulepath
rm -rf $submodulepath
rm -rf .git/modules/$submodulename
Remarque:
$submodulepath
ne contient pas de barres obliques de début ou de fin.Contexte
Lorsque vous le faites
git submodule add
, il ne fait que l'ajouter.gitmodules
, mais une fois que vous l'avez faitgit submodule init
, il l'ajoute à.git/config
.Donc, si vous souhaitez supprimer les modules, mais pouvoir les restaurer rapidement, procédez comme suit:
C'est une bonne idée de faire d'
git rebase HEAD
abord etgit commit
à la fin, si vous mettez cela dans un script.Consultez également la réponse à Puis-je dépeupler un sous-module Git? .
la source
for dir in directory/*; do git rm --cached $dir; done
.git config -f .git/config -l | cut -d'=' -f1 | grep "submodule.$MODPATH" | sed 's/^submodule\.//' | sed 's/\.url$//'
- - semble que vous devez vraiment le faire au cas où quelque chose ne fonctionnerait pas, sinon justegit submodule | grep -v '^+' | cut -d' ' -f3
git submodule | grep '^+' | cut -d' ' -f2
submodulename
des guillemets doubles"submodulename"
. renvoyant le.git/config
fichierEn plus des recommandations, je devais aussi
rm -Rf .git/modules/path/to/submodule
pouvoir ajouter un nouveau sous-module du même nom (dans mon cas je remplaçais une fourche par l'original)la source
Pour supprimer un sous-module ajouté à l'aide de:
Courir:
C'est ça.
Pour les anciennes versions de git (environ ~ 1.8.5), utilisez:
la source
git rm
laisse encore des trucs dedans.git/modules/
. (2.5.4)git rm
vous ne l' utilisez pas ensuite; Un test rapide avec 2.5.4 sur mon mac met à jour le fichier .gitmodules, comme décrit dans la documentation ici: git-scm.com/docs/git-rm#_submodules ... mais si vous avez trouvé une sorte de combinaison de plateforme / version où cela ne se produit pas, vous devriez probablement en corriger un bogue.git rm
laisse des trucs dans.git/modules/
dir et.git/config
file (ubuntu, git 2.7.4). L'autre réponse fonctionne à 100%: stackoverflow.com/a/36593218/4973698Vous devez supprimer l'entrée dans
.gitmodules
et.git/config
, et supprimer le répertoire du module de l'historique:Si vous écrivez sur la liste de diffusion de git, quelqu'un fera probablement un script shell pour vous.
la source
Vous pouvez utiliser un alias pour automatiser les solutions fournies par d'autres:
Mettez cela dans votre configuration git, et ensuite vous pouvez faire:
git rms path/to/submodule
la source
git clone https://github.com/hilbix/empty.git; cd empty; git submodule add https://github.com/hilbix/empty.git one; git mv one two; git rms two
. DEUXIÈME: Vous devez l'exécuter à partir du chemin correct.git
les alias doivent fonctionner n'importe où dans l'arborescence (ou échouer correctement). TROISIÈME:git config -f .git/config
échoue dans les sous-modules, comme c'est.git
généralement le cas là-bas.Pour résumer, voici ce que vous devez faire:
Définir
path_to_submodule
var (pas de barre oblique de fin):path_to_submodule=path/to/submodule
Supprimez la ligne appropriée du fichier .gitmodules:
git config -f .gitmodules --remove-section submodule.$path_to_submodule
Supprimez la section pertinente de .git / config
git config -f .git/config --remove-section submodule.$path_to_submodule
Décompresser et supprimer $ path_to_submodule uniquement de l'index (pour éviter de perdre des informations)
git rm --cached $path_to_submodule
Suivre les modifications apportées aux .gitmodules
git add .gitmodules
Validez le superprojet
git commit -m "Remove submodule submodule_name"
Supprimer les fichiers de sous-module désormais non suivis
rm -rf $path_to_submodule
rm -rf .git/modules/$path_to_submodule
la source
git submodule update
. Et si les chemins des sous-modules n'étaient pas mis à jour correctement (git lance une erreur), supprimez-les:rm -rf .git/modules/<submodule> && rm -rf <submodule> && git submodule update
Si le sous-module a été accidentellement ajouté parce que vous avez ajouté, validé et poussé un dossier qui était déjà un référentiel Git (contenu
.git
), vous n'aurez pas de.gitmodules
fichier à modifier, ni quoi que ce soit dedans.git/config
. Dans ce cas, il vous suffit de :FWIW , j'ai également supprimé le
.git
dossier avant de faire legit add
.la source
J'ai trouvé que les
deinit
œuvres me convenaient:De git docs :
la source
git
s qui connaissent dedeinit
, comme l'autre réponse supprime le.git/modules/submodule
répertoire trop tôt, ce qui semble faire plus récentgit
s d'échouer maintenant ou alors. De plus (voir mon commentaire là-bas), la suppression.git/modules/submodule
peut être le mauvais chemin, c'est donc une étape dangereuse, à prendre plus tard uniquement lorsquegit
vous vous plaignez (ou si vous êtes sûr à 299% que ce que vous voulez, est le bon chemin et vraiment nécessaire).git commit
de valider des changements par étapes dans dir:modified .gitmodules
etdeleted <submodule-path>
.Après avoir expérimenté toutes les différentes réponses sur ce site, je me suis retrouvé avec cette solution:
Cela restaure exactement le même état qu'avant l'ajout du sous-module. Vous pouvez tout de suite ajouter à nouveau le sous-module, ce qui n'était pas possible avec la plupart des réponses ici.
Cela vous laisse une caisse claire sans aucune modification à valider.
Cela a été testé avec:
la source
git rm --cached $path
alorsrm -rf $path
au lieu degit rm -r $path
?git submodule add https://github.com/hilbix/empty.git 'dangerous .. submodule'
-> lorsque vous essayez de supprimer «dangereux .. sous-module» avec votre script, cette volontérm -rf ..
n'est probablement pas ce que vous voulez ..Ce que je fais actuellement en décembre 2012 (combine la plupart de ces réponses):
la source
Voici ce que j'ai fait :
1.) Supprimez la section appropriée du fichier .gitmodules. Vous pouvez utiliser la commande ci-dessous:
2.) Mettre en scène les
.gitmodules
changements3.) Supprimer la section pertinente de
.git/config
. Vous pouvez utiliser la commande ci-dessous:4.) Retirez le gitlink (pas de barre oblique de fin):
5.) Nettoyez
.git/modules
:6.) S'engager:
7.) Supprimez les fichiers de sous-module non suivis
la source
fatal: no submodule mapping found in .gitmodules for path 'submodule_name'
à l'étape 3. Les deux étapes étaient cependant nécessaires. (git v2.8.2)J'ai récemment découvert un projet git qui inclut de nombreuses commandes utiles liées à git: https://github.com/visionmedia/git-extras
Installez-le et tapez:
Ensuite, les choses se font. Le répertoire du sous-module sera supprimé de votre référentiel et existera toujours dans votre système de fichiers. Vous pouvez alors engager le changement comme:
git commit -am "Remove the submodule"
.la source
git delete-submodule
, car ilgit-extras
doit être sur le chemin du travail. Notez également que je recommande de ne pas l'utilisergit-extras
, car de nombreuses parties sont extrêmement buggées et dangereuses . IEgit-delete-submodule
supprime éventuellement le mauvais chemin ci.git/modules/*
- dessous , car il suppose que le module et le chemin sont identiques (ce qui n'est souvent pas le cas), et cela ne fonctionne pas correctement si vous essayez de supprimer un sous-module dans un sous-module.git-extras
peut être utile à 99%, mais ne vous plaignez pas si les choses tournent mal en l'utilisant. TU ÉTAIS PRÉVENU!J'ai dû prendre les étapes de John Douthat un peu plus loin et
cd
dans le répertoire du sous-module, puis supprimer le référentiel Git:Ensuite, je pouvais valider les fichiers en tant que partie du référentiel Git parent sans l'ancienne référence à un sous-module.
la source
git rm --cache
.Voici les 4 étapes que j'ai trouvées nécessaires ou utiles (les plus importantes en premier):
En théorie ,
git rm
à l' étape 1, il faut s'en occuper. Espérons que la deuxième partie de la question OP puisse recevoir une réponse positive un jour (que cela puisse être fait en une seule commande).Mais à partir de juillet 2017, l' étape 2 est nécessaire pour supprimer les données
.git/modules/
, sinon vous ne pouvez pas par exemple ajouter le sous-module à l'avenir.Vous pouvez probablement vous en sortir avec les deux étapes ci-dessus pour git 1.8.5+ comme l'a noté la réponse de tinlyx , car toutes les
git submodule
commandes semblent fonctionner.L'étape 3 supprime la section pour
the_submodule
dans le fichier.git/config
. Cela devrait être fait pour être complet. (L'entrée peut causer des problèmes pour les anciennes versions de git, mais je n'en ai pas à tester).Pour cela, la plupart des réponses suggèrent d'utiliser
git submodule deinit
. Je le trouve plus explicite et moins déroutant à utilisergit config -f .git/config --remove-section
. Selon la documentation git-sous - module ,git deinit
:Dernier point mais non le moindre, si vous ne le faites pas
git commit
, vous obtiendrez / risquez d'obtenir une erreur en faisantgit submodule summary
(à partir de git 2.7):Cela indépendamment du fait que vous effectuez les étapes 2 ou 3.
la source
la source
Je viens de trouver le fichier caché .submodule (nom exact oublié), il a une liste ... vous pouvez les effacer individuellement de cette façon. Je viens d'en avoir un, donc je l'ai supprimé. C'est simple, mais ça pourrait gâcher Git, car je ne sais pas si quelque chose est attaché au sous-module. Semble correct jusqu'à présent, à part le problème de mise à niveau habituel de libetpan, mais ce n'est (espérons-le) pas lié.
Personne n'a remarqué d'effacement manuel, donc ajouté
la source
.gitmodules
Avec git 2.17 et supérieur, c'est juste:
la source
git 2.17.1
nigit 2.20.1
. Cependant en utilisantgit rm
au lieu degit add
travaillé pour les deux. Remarques:-f
n'est pas nécessaire si les choses sont propres. Assurez-vous de ne jamais utiliser d'options avecgit
si vous souhaitez vous protéger contre la perte de données involontaire. Notez également que cela laisse.git/modules/{module_name}
en place. Il est préférable de le conserver car ilgit
imprime l'aide (!) Correcte sur la façon de procéder si quelque chose est bloqué pour cette raison.Si vous venez d'ajouter le sous-module, et par exemple, vous avez simplement ajouté le mauvais sous-module ou vous l'avez ajouté au mauvais endroit,
git stash
supprimez simplement le dossier. Cela suppose que l'ajout du sous-module est la seule chose que vous avez faite dans le dépôt récent.la source
Pour le bénéfice du lecteur, ceci ici essaie de le résumer et de donner un guide étape par étape sur la façon de le faire si les choses ne fonctionnent pas comme prévu. Voici la manière testée et sûre pour les
git
versions2.17
et supérieures de se débarrasser d'un sous-module :2.20.1
et Ubuntu 18.042.17.1
."$submodule"
est juste de souligner où mettre le nom, et que vous devez faire attention aux espaces et autres"$submodule"
par la méthode Windows d'un chemin d'accès correctement spécifié au sous-module. (Je ne suis pas Windows)Notez que
est l'inverse direct de
mais
est également tout à fait l'inverse de
parce que certaines commandes doivent faire plus que juste une seule chose:
git submodule deinit -- module
.git/config
git rm
.gitmodules
git submodule add
.git/modules/NAME/
git submodule init
, donc les mises à jour.git/config
git submodule update
façon non récursive le module.gitmodules
git submodule update --init --recursive -- module
Cela ne peut pas être entièrement symétrique, car le garder strictement symétrique n'a pas beaucoup de sens. Il n'y a tout simplement pas besoin de plus de deux commandes. «Extraire les données» est également implicite, car vous en avez besoin, mais la suppression des informations mises en cache n'est pas effectuée, car cela n'est pas du tout nécessaire et pourrait effacer des données précieuses.
C'est vraiment déroutant pour les nouveaux arrivants, mais c'est fondamentalement une bonne chose: fait
git
simplement ce qui est évident et le fait correctement, et n'essaie même pas d'en faire plus.git
est un outil qui doit faire un travail fiable, au lieu d'être juste un autre "Eierlegende Wollmilchsau" ("Eierlegende Wollmilchsau" se traduit pour moi par "une version maléfique d'un couteau suisse").Je comprends donc les plaintes des gens, en disant "Pourquoi ne fait-il pas
git
la chose évidente pour moi". En effet, «évident» dépend ici du point de vue. La fiabilité dans chaque situation est beaucoup plus importante. Par conséquent, ce qui est évident pour vous souvent n'est pas la bonne chose dans toutes les situations techniques possibles. N'oubliez pas que: l'AFAICSgit
suit la voie technique, pas la voie sociale. (D'où le nom intelligent: git)Si cela échoue
Les commandes ci-dessus peuvent échouer en raison des éléments suivants:
git
es trop vieux. Utilisez ensuite un nouveaugit
. (Voir ci-dessous comment.)git clean
sens. Ensuite, nettoyez d'abord votre sous-module à l'aide de cette commande. (Voir ci-dessous.)git
. Ensuite, vous êtes du côté obscur et les choses deviennent laides et compliquées. (Peut-être que l'utilisation d'une autre machine le corrige.)git
utilisateur).Les correctifs possibles suivent.
Utilisez un nouveau
git
Si votre machine est trop vieille, il n'y
submodule deinit
en a pasgit
. Si vous ne voulez pas (ou pouvez) mettre à jour votregit
, alors utilisez simplement une autre machine avec une plus récentegit
!git
est censé être entièrement distribué, vous pouvez donc en utiliser un autregit
pour faire le travail:workhorse:~/path/to/worktree$ git status --porcelain
ne doit rien sortir! Si c'est le cas, nettoyez d'abord les choses!workhorse:~/path/to/worktree$ ssh account@othermachine
othermachine:~$ git clone --recursive me@workhorse path/to/worktree/.git TMPWORK && cd TMPWORK
othermachine:~/TMPWORK$ git commit . -m . && exit
workhorse:~/path/to/worktree$ git fetch account@othermachine:TMPWORK/.git
workhorse:~/path/to/worktree$ git merge --ff-only FETCH_HEAD
. Si cela ne fonctionne pas, utilisezgit reset --soft FETCH_HEAD
git status
nettoyez les choses, jusqu'à ce que ce soit à nouveau propre. Vous pouvez le faire, car vous l'avez déjà fait nettoyer, grâce à la première étape.Cela
othermachine
peut être une machine virtuelle ou un WSL Ubuntu sous Windows, peu importe. Même unchroot
(mais je suppose que vous n'êtes pas root, car si vous l'êtes,root
il devrait être plus facile de mettre à jour vers le plus récentgit
).Notez que si vous ne pouvez pas
ssh
entrer, il existe de nombreuses façons de transporter lesgit
référentiels. Vous pouvez copier votre arbre de travail sur une clé USB (y compris le.git
répertoire) et cloner à partir de la clé. Clonez la copie, juste pour remettre les choses en ordre. Il peut s'agir d'un PITA, au cas où vos sous-modules ne seraient pas directement accessibles depuis une autre machine. Mais il existe également une solution:Vous pouvez utiliser cette multiplication et celle-ci est enregistrée dans
$HOME/.gitconfig
. Quelque chose commeréécrit les URL comme
dans
C'est facile si vous commencez à vous habituer à des
git
fonctionnalités puissantes comme celle-ci.Nettoyer les choses d'abord
Le nettoyage manuel est bon, car de cette façon, vous pouvez peut-être détecter certaines choses que vous avez oubliées.
git status
etgit clean -ixfd
est votre amirm
etdeinit
aussi longtemps que vous le pouvez. Les options (comme-f
)git
sont bonnes si vous êtes un pro. Mais comme vous êtes venu ici, vous n'êtes probablement pas aussi expérimenté dans lasubmodule
région. Il vaut donc mieux être en sécurité que désolé.Exemple:
Vous voyez, il n'y en a pas
-f
besoinsubmodule deinit
. Si les choses sont propres, dans ungit clean
sens. Notez également que cegit clean -x
n'est pas nécessaire. Cela signifie qu'ilgit submodule deinit
supprime inconditionnellement les fichiers non suivis qui sont ignorés. C'est généralement ce que vous voulez, mais n'oubliez pas. Parfois, les fichiers ignorés peuvent être précieux, comme les données mises en cache qui nécessitent des heures ou des jours pour être calculées à nouveau.Pourquoi ne jamais retirer
$GIT_DIR/modules/<name>/
?Les gens veulent probablement supprimer le référentiel mis en cache, car ils ont peur de rencontrer un problème plus tard. C'est vrai, mais rencontrer ce «problème» est la bonne façon de le résoudre! Parce que la correction est facile et bien faite, vous pourrez vivre heureux pour toujours. Cela évite des problèmes plus encombrants que lorsque vous supprimez les données vous-même.
Exemple:
La dernière ligne génère l'erreur suivante:
Pourquoi cette erreur? Parce que
.git/modules/two/
précédemment a été rempli à partir de https://github.com/hilbix/empty.git et doit maintenant être re-rempli à partir d'autre chose, à savoir https://github.com/hilbix/src.git . Vous ne le verrez pas si vous le re-remplissez depuis https://github.com/hilbix/empty.gitQue faire maintenant? Eh bien, faites exactement ce qui vous a été dit! Utilisation
--name someunusedname
.gitmodules
ressemble alorsls -1p .git/modules/
donneDe cette façon, à l'avenir, vous pouvez changer de branche / valider en avant et en arrière et ne plus jamais avoir de problème , car vous avez
two/
deux référentiels en amont différents (et éventuellement incompatibles). Et le meilleur est: vous conservez également les deux en cache localement.git
).Cependant, si vous avez supprimé le répertoire mis en cache, les deux extractions différentes tomberont l'une sur l'autre, car vous n'utiliserez pas les
--name
options, non? Ainsi, chaque fois que vous effectuez le paiement, vous devrez peut-être supprimer le.git/modules/<module>/
répertoire encore et encore. Ceci est extrêmement lourd et rend difficile l'utilisation de quelque chose commegit bisect
.Il y a donc une raison très technique de conserver ce répertoire de module comme espace réservé. Les personnes qui recommandent de supprimer quelque chose ci-dessous
.git/modules/
ne savent pas mieux ou oublient de vous dire que cela rend les fonctionnalités puissantes commegit bisect
presque impossible à utiliser si cela croise une telle incompatibilité de sous-module.Une autre raison est indiquée ci-dessus. Regardez le
ls
. Que voyez-vous là?Eh bien, la 2ème variante de module
two/
n'est pas en dessous.git/modules/two/
, elle est en dessous.git/modules/someunusedname/
! Donc, des choses comme çagit rm $module; rm -f .git/module/$module
sont totalement fausses! Vous devez soit consulter,module/.git
soit.gitmodules
trouver la bonne chose à supprimer!Donc, non seulement la plupart des autres réponses tombent dans ce piège dangereux, même les
git
extensions très populaires avaient ce bug ( il est maintenant corrigé là-bas )! Il vaut donc mieux garder les mains du.git/
répertoire si vous ne le faites pas exactement, ce que vous faites!Pour info vous l'avez probablement deviné: hilbix est mon compte GitHub.
la source
Pour résumer, voici ce que vous devez faire:
Définissez path_to_submodule var (pas de barre oblique de fin):
Supprimez la ligne appropriée du fichier .gitmodules:
Supprimez la section pertinente de .git / config
Décompresser et supprimer $ path_to_submodule uniquement de l'index (pour éviter de perdre des informations)
Suivre les modifications apportées aux .gitmodules
Validez le superprojet
Supprimer les fichiers de sous-module désormais non suivis
Voir aussi: Lignes directrices alternatives
la source
git rm --cached $path_to_submodule
etgit add .gitmodules
non? J'ai eu une erreur sur la première commande:fatal: Please stage your changes to .gitmodules or stash them to proceed
parce que j'avais apporté des modifications non programmées à.gitmodules
. Faire legit add .gitmodules
premier résout cela.C'est facile:
.gitmodules
git add .gitmodules
git submodule deinit <path to submodule>
git rm <path to submodule>
Vous devrez supprimer manuellement les fichiers de module de votre projet.
la source
git submodule deinit <submodule_name>
etgit rm <path_to_submodule>
. La dernière commande supprime automatiquement l'entrée à l'intérieur du.gitmodules
. Git 2.17J'ai créé un script bash pour faciliter le processus de suppression. Il vérifie également s'il y a des changements dans le dépôt non enregistrés et demande une confirmation. Il a été testé sur
os x
serait intéressant de savoir si cela fonctionne également sur les distributions Linux courantes:https://gist.github.com/fabifrank/cdc7e67fd194333760b060835ac0172f
la source
Dans le dernier git, seulement 4 opérations sont nécessaires pour retirer le sous-module git.
.gitmodules
git add .gitmodules
git rm --cached <path_to_submodule>
git commit -m "Removed submodule xxx"
la source
Dans le cas où vous devez le faire en une seule ligne de commande avec le script bash comme ci-dessous:
$ cd /path/to/your/repo && /bin/bash $HOME/remove_submodule.sh /path/to/the/submodule
Créez un fichier de script bash dans le répertoire
$HOME
nommé ieremove_submodule.sh
:la source
git rm <submodule path> && git commit
. Cela peut être annulé en utilisantgit revert
..gitmodules
fichier.$GIT_DIR/modules/<name>/
.La source:
git help submodules
la source
Suppression du sous-module Git
Pour supprimer un
git
sous-module en dessous de 4 étapes sont nécessaires..gitmodules
fichier. L'entrée peut être comme mentionnée ci-dessousgit add .gitmodules
git rm --cached <path_to_submodule>
.git commit -m "Removed submodule xxx"
et poussez.2 étapes supplémentaires mentionnées ci-dessous sont nécessaires pour nettoyer complètement le sous-module dans la copie clonée locale.
.git/config
fichier. L'entrée peut être comme mentionnée ci-dessousrm -rf .git/modules/path_to_submodule
Ces 5e et 6e étapes ne créent aucun changement qui doit être validé.
la source
git submodule deinit
utilisiez git-scm.com/docs/git-submodule#Documentation/…