J'essaie en fait d'apprendre à utiliser git, y compris les git submodule
sous - commandes. J'ai déjà configuré un serveur sur lequel je peux héberger, pousser et extraire des référentiels git en utilisant SSH. J'ai créé un référentiel git principal "Travail" sur ce serveur dans lequel je voudrais mettre tous mes projets sous forme de 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'essaye d'ajouter 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 remote (s): origin ssh: //[email protected]: XXXXX / opt / git / fdf.git Si vous souhaitez réutiliser ce 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 bon dépôt ou si vous n'êtes pas sûr de ce que cela signifie, choisissez un autre nom avec l'option '--name'.
Il n'y a en fait aucun sous-répertoire dans projets/
J'ai lu sur un autre fil que je devrais utiliser git submodule sync
ou modifier 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 en anglais que j'ai, mais j'ai cherché et je ne comprends vraiment pas pourquoi je reçois ce problème.
Je serais heureux si j'obtenais une solution, mais une simple explication serait également utile.
la source
/Travail/.git/modules/projets/
et j'ai trouvé unfdf
répertoire. Cela ne semble pas être dans l'arbre de travail mais dans les commits plus anciens. Cela pourrait-il générer le problème?Réponses:
Je suis arrivé à ce message SO en essayant d'ajouter 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 ne l'avez pas déjà exécuté
git rm --cached path_to_submodule
(pas de barre oblique finale)rm -rf path_to_submodule
, faites-le!Ensuite:
Supprimez les lignes pertinentes du
.gitmodules
fichier. par exemple, supprimez-les:[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, supprimez-les:
[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
la source
git rm
et lesrm -rf
étapes.).git/modules
et cela a fini par fonctionner.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 lesgit submodule
commandes etrm
tous les autres répertoires, pushs to master etc ... le répertoire n'existait pas et il n'y avait aucune raison pour le cache. Il s'avère.git/modules
que c'est là que se trouvait cette erreur.la source
Vous avez peut-être supprimé votre
'projets/fdf'
disque, mais votre référentiel Git l'a toujours. Utilisezgit 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.la source
/tmp/repo
, puis exécutezgit submodule add ../otherrepo.git
, vous verrez que ce/tmp/repo/.git/modules/otherrepo
dossier existe. Voilà le problème pour moi. J'ai supprimé manuellement ce dossier de .git, et tout a fonctionné.Si vous avez déjà supprimé le répertoire du sous-module, comme je l'ai fait, suivez le reste des instructions de jbmilgrom. La clé est
rm -rf .git/modules/path_to_submodule
mais allez-y et sauvegardez d'abord tout votre répertoire de dépôt parent .Si vous n'aviez qu'un sous-module, supprimez simplement
.gitmodules
la source
Ces deux commandes fonctionnent pour moi.
la source
.git/modules/
. Dans il y a un dossier qui stocke le référentiel pour le sous-module. La suppression de ce référentiel a résolu le problème pour moi, contrairement à la réponse acceptée.