Le sous-module Git ajoute: «un répertoire git est trouvé localement»

J’essaie en fait d’apprendre à utiliser git, y compris les sous-commandes “git submodule”. J’ai déjà installé un serveur sur lequel je peux héberger, pousser et extraire des référentiels git en utilisant ssh. J’ai créé sur ce serveur un repository git principal “Travail” dans lequel j’aimerais mettre tous mes projets en sous-modules.

Dans mon référentiel Travail, j’ai déjà ajouté un de mes projets en tant que sous-module à tools/libft : je suis capable de développer ce sous-module, de le pousser et de le tirer.

Mais lorsque j’essaie d’append un autre sous-module (nommé fdf, à partir de fdf.git sur mon serveur), j’obtiens le problème suivant:

 git submodule add ssh://XXX.XXX.XXX.XXX:XXXXX/opt/git/fdf.git projets/fdf 

Un répertoire git pour ‘projets / fdf’ est trouvé localement avec une ou des télécommande (s): ssh d’origine: //git@XXX.XXX.XXX.XXX: XXXXX / opt / git / fdf.git Si vous voulez réutiliser cette git locale répertoire au lieu de cloner à nouveau à partir de ssh: //XXX.XXX.XXX.XXX: XXXXX / opt / git / fdf.git utilisez l’option ‘–force’. Si le répertoire git local n’est pas le bon référentiel ou si vous ne savez pas ce que cela signifie, choisissez un autre nom avec l’option ‘–name’.

Il n’y a pas de sous-répertoire dans projets/

J’ai lu sur un autre thread que je devrais utiliser la synchronisation des sous-modules git ou éditer le fichier .gitmodules dans lequel l’URL du référentiel d’origine de mon sous-module aurait pu changer.

Mais mon fichier .gitmodules ne contient que les informations sur mon premier sous-module (tools / libft), pas sur projets / fdf:

 [submodule "tools/libft"] path = tools/libft url = ssh://git@XXX.XXX.XXX.XXX:XXXXX/opt/git/libft.git 

En tant qu’étudiant français, j’aurais pu manquer quelque chose dans la documentation anglaise que j’ai, mais j’ai cherché et je ne comprends vraiment pas pourquoi je reçois ce problème.

Je serais heureux si je recevais une solution mais une explication serait utile aussi.

Je suis venu à cette publication en essayant d’append un sous-module avec le même chemin qu’un sous-module que j’ai récemment supprimé.

C’est ce qui a finalement fonctionné pour moi ( cet article a beaucoup aidé ):

Si vous n’avez pas encore lancé git rm --cached path_to_submodule (pas de slash git rm --cached path_to_submodule ) ainsi que rm -rf path_to_submodule , faites-le!

Alors:

  1. Supprimez les lignes pertinentes du fichier .gitmodules . par exemple supprimer ces:

    [submodule "path_to_submodule"] path = path_to_submodule url = https://github.com/path_to_submodule

  2. Supprimez la section correspondante de .git / config. par exemple supprimer ces:

    [submodule "path_to_submodule"] url = https://github.com/path_to_submodule

  3. rm -rf .git/modules/path_to_submodule

Ensuite, vous pouvez enfin:

git submodule add https://github.com/path_to_submodule

J’ai essayé la solution de jbmilgrom, en particulier j’ai essayé git rm --cache et cela n’a pas fonctionné pour moi non plus car le répertoire / sous-module n’était pas là. Ce qui a fonctionné pour moi était:

  1. rm -rf .git/modules/blah
  2. git submodule add git://path.to.new

Je l’ai fait après avoir essayé --force dans les commandes du git submodule et rm tous les autres répertoires, poussé vers le maître, etc. .git/modules dans les .git/modules c’est là que cette erreur mentait.

Vous avez peut-être supprimé vos 'projets/fdf' du disque, mais votre repository Git l’a toujours. Utilisez git rm -rf projets/fdf pour le supprimer de Git, puis validez les modifications. Après cela, vous pourrez append ce dossier en tant que sous-module.

Si vous avez déjà supprimé le répertoire du sous-module, comme je l’ai fait, suivez les instructions du rest de jbmilgrom. La clé est rm -rf .git/modules/path_to_submodule mais rm -rf .git/modules/path_to_submodule par sauvegarder tout votre répertoire repo parent .

Si vous n’aviez qu’un seul sous-module, supprimez simplement .gitmodules