web-dev-qa-db-fra.com

Quelle est la méthode actuelle pour supprimer un sous-module git?

à partir de la version 1.9.3 de git (Apple Git-50) sur mac, comment puis-je retirer 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 manière actuelle? volonté git deinit pathToSubModule faire l'affaire ?

Les étapes que je pensais fonctionner seraient ici mais les commentaires disent qu’elles ne le feraient pas.

Laissez-moi vous expliquer ma situation actuelle et ce que j’ai besoin de faire. J'ai installé le référentiel rapide et je l'ai ajouté comme sous-module à mon projet. Ce code est déjà enregistré et d’autres l’utilisent. Ce que je dois maintenant faire, c’est créer un fork dans le même référentiel rapide et l’héberger sur un github plus sécurisé que celui de mon entreprise (donc un github complètement différent) . Après l'avoir bricolé, je souhaite ajouter cette fork en tant que gitSubmodule et la laisser remplacer le sous-module Quick actuel que j'avais déjà installé.

mise à jour: j'ai lu que ce qui suit est la bonne manière de confirmer la dernière version de Git, veuillez confirmer?

To remove a submodule added using:

git submodule add [email protected]: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
82
j2emanue

Tu as le git submodule deinit

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>
rm -rf .git/modules/<asubmodule>

deinit

Annulez l'enregistrement des sous-modules donnés, c'est-à-dire supprimez l'ensemble submodule.$name
section de .git/config avec leur arbre de travail.

Autres appels à git submodule update, git submodule foreach et git submodule sync va ignorer tous les sous-modules non enregistrés jusqu’à ce qu’ils soient réinitialisés, utilisez donc cette commande si vous ne souhaitez plus que le sous-module soit extrait localement dans votre arbre de travail.

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

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

167
CodeWizard

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

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

  1. Répertoriez et localisez la section de sous-module dans .gitmodules fichier. 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 fourchettes locales. Pour les projets de longue durée, le code peut différer du référentiel d'origine et peut avoir des correctifs. Il est judicieux de vérifier si le code de sous-module a subi des modifications au cours du projet. Exemple: Regardez les journaux, s'il pointe vers master branch ou une branche locale. explorer les logs de git pour trouver les modifications effectuées via un terminal. typiquement ceux-ci sont stockés dans un répertoire, mon exemple, sous le répertoire submodules.

    User$ cd submodules/afnetworking
    User$ git log
    
  3. Supprimez la section de sous-module de .gitmodules, enregistrez le fichier. Exemple: git status devrait afficher uniquement les modifications suivantes

    modified:   .gitmodules
    
  4. Mettez en scène les changements avec git add .gitmodules.

  5. Répertoriez et localisez la section de sous-module dans .git/config des dossiers. Dites via le terminal vi .git/config. Exemple:

    [submodule "submodules/afnetworking"]
        url = https://github.com/CompanyName/afnetworking.git
    
  6. Supprimez les fichiers sobmodule du cache git. fonctionnement git rm --cached submodules/afnetworking (sans barre oblique) l’éliminerait avec succès. Exemple:

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

    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 <file>..." to unstage)
        modified:   .gitmodules
        deleted:    submodules/afnetworking
    Untracked files:
      (use "git add <file>..." to include in what will be committed)
        submodules/afnetworking/
    
  8. Commettez les modifications. Confirmer avec git status ensuite.

    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 <file>..." 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. Supprimer les références du projet Xcode. Construisez, corrigez les problèmes de compilation et d'exécution.

3
lal

J'utilise Git version 2.16.2 et git rm fait le travail principalement 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 .gitmodules automatiquement. Comme toujours, vous devez engager le changement.

Cependant, même si le sous-module est supprimé du contrôle de 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 de sous-modules et la configuration est intentionnel afin que vous puissiez annuler la suppression avec par exemple. git reset --hard.

1
mrts