à 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
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
etgit 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.
(ajoute à https://stackoverflow.com/a/1260982/342794 )
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
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
Supprimez la section de sous-module de .gitmodules, enregistrez le fichier. Exemple: git status
devrait afficher uniquement les modifications suivantes
modified: .gitmodules
Mettez en scène les changements avec git add .gitmodules
.
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
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
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/
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)
Supprimez les fichiers de sous-module non suivis.
User$ rm -rf submodules/afnetworking
Supprimer les références du projet Xcode. Construisez, corrigez les problèmes de compilation et d'exécution.
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
.