Je suis nouveau sur git et j'aimerais avoir de l'aide pour ajouter des sous-modules. J'ai reçu deux projets partageant un code commun. Le code partagé vient d'être copié dans les deux projets. J'ai créé un dépôt git séparé pour le code commun et je l'ai supprimé des projets avec le plan pour l'ajouter en tant que sous-module git.
J'ai utilisé l'option path de git submodule add pour spécifier le dossier:
git submodule add url_to_repo projectfolder
mais a ensuite obtenu l'erreur:
'projectfolder' already exists in the index"
Voici la structure souhaitée de mon référentiel:
repo
|-- projectfolder
|-- folder with common code
Il est possible d'ajouter le sous-module git directement dans le repo ou dans un nouveau dossier, mais pas dans le dossier du projet. Le problème est qu'il doit vraiment se trouver dans le dossier du projet.
git
git-submodules
Vanja
la source
la source
git ls-files --stage projectfolder
?git rm
sur le dossier existant a aidé: |Réponses:
Je crains qu'il n'y ait pas suffisamment d'informations dans votre question pour être certain de ce qui se passe, puisque vous n'avez pas répondu à ma question de suivi, mais cela peut être utile dans tous les cas.
Cette erreur signifie qu'elle
projectfolder
est déjà mise en scène ("existe déjà dans l'index"). Pour savoir ce qui se passe ici, essayez de répertorier tout dans l'index sous ce dossier avec:La première colonne de cette sortie vous indiquera quel type d'objet se trouve dans l'index à
projectfolder
. (Ils ressemblent aux modes de fichiers Unix, mais ont des significations spéciales dans git.)Je soupçonne que vous verrez quelque chose comme:
(c'est-à-dire une ligne commençant par
160000
), auquel cas le référentiel dansprojectfolder
a déjà été ajouté en tant que "gitlink". S'il n'apparaît pas dans la sortie degit submodule
et que vous souhaitez l'ajouter à nouveau en tant que sous-module, vous pouvez effectuer:... pour le déchaîner, puis:
... pour ajouter le référentiel en tant que sous-module.
Cependant, il est également possible que de nombreux objets blob soient répertoriés (avec les modes de fichier
100644
et100755
), ce qui me suggérerait que vous n'avez pas correctement mis en scène les fichiersprojectfolder
avant de copier le nouveau référentiel en place. Si tel est le cas, vous pouvez procéder comme suit pour supprimer tous ces fichiers:... puis ajoutez le sous-module avec:
la source
projectfolder
ne contient pas de.git
répertoire. Cela sonnait à votre question comme si vous aviez créé le nouveau référentiel pourprojectfolder
ailleurs et l' aviez copié en place, mais ce n'était clairement pas le cas. Vous devez déplacer l'existantprojectfolder
, puis copier le nouveau référentiel (complet avec son.git
répertoire) en place avant de l'ajouter en tant que sous-module. Ou, si vous l'avez déjà poussé vers le référentiel représenté parurl_to_repo
, vous pouvez simplement vousprojectfolder
éloigner, puis ajouter le sous-module à partir de cette URL.La suppression manuelle du sous-module implique un certain nombre d'étapes et cela a fonctionné pour moi.
En supposant que vous vous trouviez dans le répertoire racine du projet et que l'exemple de nom de module git soit "c3-pro-ios-framework"
Supprimez les fichiers associés au sous-module
Supprimez toutes les références au sous-module dans la configuration
Supprimer les .gitmodules
Retirez-le du cache sans le "git"
Ajouter un sous-module
la source
git submodule
après la suppression et avant d'ajouter et cela m'a donné une erreur, en validant la suppression, j'ai pris soin de cela.touch .gitmodules
(doit être dans l'arborescence de travail, donc le supprimer aide. Mais vous devez l'ajouter à nouveau). Génial après btw. La seule chose qui a fonctionné ici..git
répertoire qui avait encore des restes pour moi. Cela a très bien fonctionné. Je vous remercie.Vous devez d'abord supprimer votre référentiel git de sous-module (dossier de projet dans ce cas) pour le chemin git.
puis ajouter un sous-module
la source
git submodule add --force <git_submodule_repository>
travaillé pour moi pour garder le même nom de sous-moduleJ'ai eu le même problème et après des heures de recherche, j'ai trouvé la réponse.
L'erreur que j'obtenais était un peu différente:
<path> already exists and is not a valid git repo
(et ajoutée ici pour la valeur SEO)La solution est de NE PAS créer le répertoire qui abritera le sous-module. Le répertoire sera créé dans le cadre de la
git submodule add
commande.En outre, l'argument devrait être relatif à la racine du référentiel parent, et non à votre répertoire de travail, alors faites attention à cela.
Solution pour l'exemple ci-dessus:
common_code
répertoire n'existe pas .cd Repo
git submodule add git://url_to_repo projectfolder/common_code/
( Notez la barre oblique de fin requise. )J'espère que cela aide quelqu'un, car il y a très peu d'informations à ce sujet ailleurs.
la source
git submodule add
et la barre oblique de fin n'est pas requise.s'il existe un dossier nommé
x
sous git control, vous voulez ajouter un sous-module du même nom, vous devez supprimer le dossierx
et le valider en premier .Mis à jour par @ ujjwal-singh:
L'engagement n'est pas nécessaire, la mise en scène suffit ..
git add
/git rm -r
la source
git add
/gir rm -r
Juste pour clarifier en langage humain ce que l'erreur essaie de vous dire:
Vous ne pouvez pas créer un référentiel dans ce dossier qui a déjà été suivi dans le référentiel principal.
Par exemple: Vous avez un dossier de thème appelé
AwesomeTheme
c'est un référentiel dédié, vous essayez de le vider directement dans votre référentiel principal commegit submodule add sites/themes
et vous obtenez ceci"AwesomeTheme" index already exists
.Vous devez juste vous assurer qu'il n'y a pas déjà
sites/themes/AwesomeTheme
de suivi de version dans le référentiel principal pour que le sous-module puisse y être créé.Donc, pour corriger, dans votre référentiel principal si vous avez un
sites/theme/AwesomeTheme
répertoire vide , supprimez-le. Si vous avez déjà effectué des validations avec lesites/theme/AwesomeTheme
répertoire de votre référentiel principal, vous devez en purger tout l'historique avec une commande comme celle-ci:Vous pouvez maintenant exécuter
git submodule add [email protected] sites/themes/AwesomeTheme
Comme le référentiel principal n'a jamais rien vu (aka indexé)
sites/themes/AwesomeTheme
auparavant, il peut maintenant le créer.la source
Je l'ai fait fonctionner en le faisant dans l'autre sens. En commençant par un dépôt vide, en ajoutant le sous-module dans un nouveau dossier appelé "projectfolder / common_code". Après cela, il a été possible d'ajouter le code du projet dans le dossier du projet. Les détails sont indiqués ci-dessous.
Dans un type de référentiel vide:
Cela créera la structure de dossiers souhaitée:
Il est désormais possible d'ajouter d'autres sous-modules et le code du projet peut être ajouté au dossier du projet.
Je ne peux pas encore dire pourquoi cela a fonctionné de cette façon et pas l'autre.
la source
Je ne sais pas si cela est utile, bien que j'aie eu le même problème lorsque j'essayais de valider mes fichiers depuis IntelliJ 15. En fin de compte, j'ai ouvert SourceTree et là-dedans, je pouvais simplement valider le fichier. Problème résolu. Pas besoin d'émettre de commandes git fantaisistes. Il suffit de le mentionner au cas où quelqu'un aurait le même problème.
la source
Accédez au dossier du référentiel. Supprimez les sous-modules concernés de .gitmodules. Sélectionnez afficher les fichiers cachés. Accédez au dossier .git, supprimez les sous-modules du dossier du module et configurez.
la source
Cela se produit si le fichier .git est manquant dans le chemin cible. Cela m'est arrivé après avoir exécuté
git clean -f -d
.J'ai dû supprimer tous les dossiers cibles affichés dans le message, puis exécuter
git submodule update --remote
la source
Dans votre répertoire git, supposons que vous ayez synchronisé toutes les modifications.
Alors fais:
la source