web-dev-qa-db-fra.com

Ajouter un sous-module qui ne peut pas être supprimé de l'index

J'essaie d'ajouter un sous-module qui existait déjà (référentiel distant git différent). Comme je n'avais pas cherché auparavant comment le faire correctement, je pense que j'ai bousillé mon référentiel et que j'ai besoin d'aide pour le réparer à nouveau.

J'ai déjà supprimé toutes les sections pertinentes des .gitmodules et .git/config en ce qui concerne les sous-modules que je veux supprimer. J'ai également vérifié qu'il n'y avait pas de répertoire de modules dans mon répertoire .git /.

Cependant, lorsque j'exécute la commande git rm --cached path_to_submodule, le message suivant s'affiche:

 fatal: pathspec 'path_to_submodule' ne correspond à aucun fichier 

Comme la commande précédente échoue, lorsque j'essaie d'ajouter à nouveau le même sous-module avec les nouvelles définitions, en exécutant la commande git submodule add gituser@Host:repo.git, le message suivant s'affiche:

 'repo' existe déjà dans l'index 
20
Rui Gonçalves

Le message ('repo' already exists in the index) peut uniquement être affiché si "repo" existe toujours dans l'index (voir ce chapitre sur le sous-module ):

$ rm -Rf rack/
$ git submodule add [email protected]:schacon/rack.git rack
'rack' already exists in the index

You have to unstage the rack directory first. Then you can add the submodule:

$ git rm -r rack
$ git submodule add [email protected]:schacon/rack.git rack

Même si 'rack' n'est pas un sous-module, s'il existe, cela empêcherait la déclaration d'un sous-module du même nom.

44
VonC

Si la sortie ajoutant un nouveau sous-module est:

'FolderName' already exists in the index

Astuce les prochaines commandes

git ls-files --stage 

La sortie sera quelque chose de similaire à:

160000 d023657a21c1bf05d0eeaac6218eb5cca8520d16  0  FolderName

Ensuite, pour supprimer le conseil index de dossier:

git rm -r --cached FolderName

Essayez à nouveau d'ajouter le sous-module

4
GutiMac

Peut se produire, lors de la fusion avec une erreur, la suppression manuelle du dossier du sous-module, ou quelque chose d'autre, comme Hallileo Comet

  1. dans le fichier .gitmodules - supprimer les liens vers le sous-module (section entière avec le nom du sous-module)

  2. dans le fichier .git\config - supprimer les liens vers le sous-module, comme à l'étape précédente

  3. dans le dossier .git\modules - supprime le dossier avec le chemin relatif similaire au chemin relatif du module "problème"

  4. s'assurer que ce dossier de sous-module n'existe plus

  5. puis:

    $ git submodule add -f --name <name> <git://path_1.git> <path_2>

    où: nom - nom du sous-module comme vous le souhaitez, peut être égal à votre nom repo; - chemin d'accès au dépôt source du sous-module (c'est-à-dire - github, etc.), - chemin relatif au dossier où le sous-module résidera

    ceci nous permet d’ajouter un sous-module dans path ou avec un nom qui existe toujours dans l’index, mais pas naturellement en vie.

je n'ai trouvé aucune méthode pour supprimer ces liens morts de l'index, mais lorsque forcé

1
SynCap

'submodules/uasdk-clib' existe déjà dans l'index

git rm -r --cached submodules/uasdk-clib

sous-module git add -b china/release/16.8.0 -f ssh: //[email protected] sous-modules/uasdk-clib

0
knight2016