web-dev-qa-db-fra.com

Sous-module Git add: problème "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à configuré un serveur sur lequel je peux héberger, pousser et extraire des référentiels git en utilisant ssh ..__ Ce serveur est un référentiel principal git "Travail" dans lequel je voudrais mettre tous mes projets en tant que sous-modules.

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

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

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

Un répertoire git pour 'projets/fdf' se trouve localement avec les télécommandes: Origine ssh: //[email protected]: XXXXX/opt/git/fdf.git Si vous souhaitez réutiliser ce répertoire git local 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 référentiel correct ou 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 du sous-module git ou modifier le fichier .gitmodules dans lequel l'URL du référentiel Origin de mon sous-module aurait pu être modifiée.

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://[email protected]:XXXXX/opt/git/libft.git

En tant qu'étudiant français, j'aurais peut-être oublié quelque chose dans la documentation anglaise que j'ai, mais j'ai cherché et je ne comprends vraiment pas pourquoi j'ai ce problème.

Je serais heureux si je pouvais obtenir une solution, mais une explication serait également utile.

111
vmonteco

Je suis arrivé à cette SO publication en essayant d'ajouter un sous-module avec le même chemin que celui que j'ai récemment supprimé.

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

Si vous n'avez pas encore exécuté git rm --cached path_to_submodule (sans barre oblique) ainsi que rm -rf path_to_submodule, faites-le!

Ensuite:

  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 appropriée 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

244
jbmilgrom

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'y était pas. Ce qui a fonctionné pour moi a été:

  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 git submodule et rm dans tous les autres répertoires, que l'on mappe à maîtriser, etc. Il s’est avéré dans .git/modules que cette erreur était en train de mentir.

33
pjammer

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

15
bredikhin

Si vous avez déjà supprimé le répertoire du sous-module, comme moi, suivez le reste des instructions de jbmilgrom. La clé est rm -rf .git/modules/path_to_submodule, mais continuez et sauvegardez d’abord votre répertoire de dépôt principal .

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

11
Dmitri R117

Ces deux commandes fonctionnent pour moi.

rm path/to/submodule -rf
rm .git/modules/path/to/module -rf
0
W.Perrin

J'ai essayé ces réponses et elles n'ont pas fonctionné pour moi. La seule chose qui a fonctionné pour moi a été de supprimer mon dépôt principal et de le redescendre. J'espère que ça aide quelqu'un 

0
Gerard Simpson