Quel est le moyen actuel de supprimer un sous-module git?

à partir de la version 1.9.3 de git (Apple Git-50) sur mac comment puis-je supprimer un sous-module git? Je lis beaucoup d’informations obsolètes avec de nombreux développeurs me disant qu’ils ne fonctionneront pas. Quelle est la voie actuelle? va git deinit pathToSubModule faire le tour?

Les étapes que je pensais pouvoir fonctionner sont ici mais les commentaires disent qu’ils ne le feront pas.

Laissez-moi vous expliquer ma situation actuelle et ce dont j’ai besoin. J’ai installé le référentiel Quick et l’ai ajouté en tant que sous-module à mon projet. Ce code est déjà archivé et d’autres l’utilisent. Ce que je dois faire maintenant, c’est de bricoler le même référentiel Quick et de l’héberger sur un github plus sécurisé que mon entreprise (donc un github totalement privé). Après l’avoir falsifié, je veux append ce fork en tant que gitSubmodule et le laisser remplacer le sous-module Quick actuel que j’avais installé précédemment.

mise à jour: j’ai lu que ce qui suit est la manière correcte sur la dernière version de git s’il vous plaît confirmer?

 To remove a submodule added using: git submodule add blah@blah.com:repos/blah.git lib/blah Run: git rm lib/blah That's it. For old versions of git (circa ~1.8.5) use: git submodule deinit lib/blah git rm lib/blah git config -f .gitmodules --remove-section submodule.lib/blah 

Vous avez le git submodule deinit

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

deinit

Désenregistrer les sous-modules donnés, c’est-à-dire supprimer le submodule.$name entier submodule.$name
section de .git/config avec leur arbre de travail.

Les autres appels à git submodule update , git submodule foreach et git submodule sync ignorent tous les sous-modules non enregistrés jusqu’à ce qu’ils soient initialisés à nouveau.

Si vous voulez vraiment supprimer un sous-module du référentiel et le valider, utilisez plutôt git rm .

Si --force est spécifié, l’arbre de travail du sous-module sera supprimé même s’il contient des modifications locales.

Comment retirer en toute sécurité un sous-module.

(ajoute à https://stackoverflow.com/a/1260982/342794 )

  1. Lister et localiser la section du sous-module dans le fichier .gitmodules . Dites via le terminal vi .gitmodules . Exemple:

     [submodule "submodules/afnetworking"] path = submodules/afnetworking url = https://github.com/CompanyName/afnetworking.git 
  2. Les sous-modules peuvent être utilisés avec des fourches locales. Pour les projets de longue durée, le code peut différer du repository d’origine et peut avoir des corrections. C’est une bonne idée de vérifier si le code du sous-module a subi des modifications au cours du projet. Exemple: Regardez les journaux, si elle pointe vers la twig principale ou une twig locale. explorer les journaux de Git pour trouver les modifications effectuées via le terminal. ils sont généralement stockés dans un répertoire, par exemple, sous le répertoire des sous- submodules .

     User$ cd submodules/afnetworking User$ git log 
  3. Supprimez la section de sous-module de .gitmodules, enregistrez le fichier. Exemple: le git status doit apparaître uniquement comme modifié

     modified: .gitmodules 
  4. git add .gitmodules scène les modifications avec git add .gitmodules .

  5. Listez et localisez la section du sous-module dans les fichiers .git/config . Dites via le terminal vi .git/config . Exemple:

     [submodule "submodules/afnetworking"] url = https://github.com/CompanyName/afnetworking.git 
  6. Supprimez les fichiers de module sobmodule git cache. exécuter git rm --cached submodules/afnetworking (pas de barre oblique de fin) le supprimerait avec succès. Exemple:

     User$ git rm --cached submodules/afnetworking rm 'submodules/afnetworking' < -- terminal output 
  7. Supprimez les fichiers de sous-module sous le répertoire .git avec rm -rf .git/modules/... Confirmez-le avec le git status après.

     User$ rm -rf .git/modules/submodules/afnetworking/ User$ git status On branch feature/replace-afnetworking-submodule-with-pod Changes to be committed: (use "git reset HEAD ..." to unstage) modified: .gitmodules deleted: submodules/afnetworking Untracked files: (use "git add ..." to include in what will be committed) submodules/afnetworking/ 
  8. Engagez les changements. Confirmez avec le git status après.

     User$ git commit -m "Remove submodule afnetworking" [feature/replace-afnetworking-submodule-with-pod 70e239222] Remove submodule afnetworking 2 files changed, 4 deletions(-) delete mode 160000 submodules/afnetworking User$ git status On branch feature/replace-afnetworking-submodule-with-pod Untracked files: (use "git add ..." to include in what will be committed) submodules/afnetworking/ nothing added to commit but untracked files present (use "git add" to track) 
  9. Supprimez les fichiers de sous-module non suivis.

     User$ rm -rf submodules/afnetworking 
  10. Supprimez les références du projet Xcode. Créez, corrigez les problèmes de compilation et d'exécution.

J’utilise la version 2.16.2 de Git et git rm fait le travail surtout bien:

 git rm path-to-submodule 

Vous pouvez vérifier avec git status et git diff --cached que cela désinitialise le sous-module et modifie automatiquement les modules .gitmodules . Comme toujours, vous devez commettre le changement.

Cependant, même si le sous-module est supprimé du contrôle de .git/modules/path-to-submodule source, .git/modules/path-to-submodule contient toujours le référentiel de sous-modules et .git/config contient son URL, vous devez donc toujours les supprimer manuellement:

 git config --remove-section submodule.path-to-submodule rm -rf .git/modules/path-to-submodule 

Conserver le référentiel et la configuration du sous-module est intentionnel afin que vous puissiez annuler la suppression avec, par exemple, git reset --hard .