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: //[email protected]: 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://[email protected]: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:
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
Supprimez la section correspondante de .git / config. par exemple supprimer ces:
[submodule "path_to_submodule"] url = https://github.com/path_to_submodule
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:
rm -rf .git/modules/blah
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