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.
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:
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 appropriée 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'y était pas. Ce qui a fonctionné pour moi a été:
rm -rf .git/modules/blah
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.
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.
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
Ces deux commandes fonctionnent pour moi.
rm path/to/submodule -rf
rm .git/modules/path/to/module -rf
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