Incapable de git checkout sous-module de chemin
J'ai un problème lorsque l'on travaille avec des submodules.
Chaque fois que je reçois un nouveau sous-module de référence de l'amont référentiel, l'exécution de git submodule update
donne le résultat suivant:
fatal: reference is not a tree: dd208d46ecdd1ac0d2b2594a610fe4c9150fece1
Unable to checkout 'dd208d46ecdd1ac0d2b2594a610fe4c9150fece1' in submodule path 'submodule/path'
Il est important de noter que le sous-module a plusieurs télécommandes, dont l'amont à distance devrait être utilisé pour mettre à jour le sous-module de référence de l'arbre. Je suppose que mon problème est là, mais je ne suis pas sûr.
Ma configuration est la suivante:
Projet Git
Télécommandes:
origin
(mon git fourche)upstream
(projet repo)
Sous-module "module", a télécommandes:
origin
(mon git fourche)upstream
(projet repo)
Personne ne sait quelle est la cause de mon problème?
Vous devez vous connecter pour publier un commentaire.
Lors
git submodule update
, git essaie à la caisse de la livraison/de l'arbre qui est enregistré dans le super projet (dans votre exemple, l'un avec la validation iddd208d4...
)Je pense que vous obtenez l'erreur, parce que dans le sous-module-il pas de tels objets. Vous devez vous assurer qu'il est là. Habituellement, cela signifie que vous devez d'extraction/de traction à partir d'une distance de la première.
Probablement que vous avez à
ou peut-être
En supposant, que le sous-module est configuré de sorte qu'il peut aller chercher les disparus s'engager à partir de la télécommande
origin
. En fin de compte, vous doit savoir, d'où vous pouvez chercher de l'manquant de s'engager et vous devez le faire.Vous pouvez vérifier, si vous avez
dd208d4...
en faisant quelque chose comme:Une des causes possibles de ce problème est, que celui qui a publié la nouvelle révision de la super module, n'a pas la publication des commits de la sous-module. Il doit publier les commits de la sous-module premier.
rebase
ing une branche sur une mise à jour demaster
pour annuler toute modification accidentelle d'un sous-module... pour l'instant c'estgit submodule foreach git fetch && git submodule deinit -f . && git submodule update --init
.Assurez-vous que les submodules ont poussé à la
Dans mon cas, j'ai eu:
il n'est donc pas étonnant qu'il n'a pas pu être trouvé.
Puis, si vous utilisez une interface web tels que GitHub, vous pouvez également aller à la sous-module référentiel de la page web, et vérifiez que la livraison vous avez besoin de shows.
push.recurseSubmodules on-demand
Il est possible d'automatiser pousse plus loin avec:
qui pousse également les submodules en tant que de besoin, ou de commencer avec 2.7:
mkdir repo && cd repo && git init && touch a && git add .
...J'ai eu le même problème et je l'ai résolu en ajoutant un nouveau commit pour le projet parent et pousser toutes
juste vu ce problème quand j'ai oublié de pousser les modifications dans l'un de mes submodules
assurez-vous que les changements sont poussés
Mon problème est que sur un
cat .gitmodules
de mon repo, je pointait le mal à distance pour le sous-module de pensions de titres (j'avais initialement clonés avec la télécommande d'origine, mais ensuite passé à une fourche; lesgitmodules
fichier jamais mis à jour pour refléter le changement).Mon problème est que j'avais les modifications non validées dans les submodules dans leur build.gradle fichiers (qui je pense ont été modifiés automatiquement). Ils ont montré dans la
git diff
. J'ai juste faitgit checkout .
pour réinitialiser le sous-module repos ne pas avoir de modifications et ensuite legit submodule update
travaillé.Une autre façon peut être, sans la ligne de commande git options, mais de le faire manuellement.
Le scénario se déroule principalement à l', lorsque le sous-module de chemins ont été déplacés ou remplacés (mais pas correctement), ce qui pointe toujours vers l'ancien des références dans les locaux de la caisse des dépôts.
1) Localiser le dépôt, et le sous-module
2) Supprimer les anciens locaux de la sous-module de configurations
(supprimer le sous-module de saisie de l'url ici)
Il ressemble à quelque chose comme cela;
3) Maintenant, extraire et mettre à jour les submodules fraîchement
git fetch
git sous-module de mise à jour --recursive --init
Remarque:
On peut en outre avoir à l'enlever, de la localement des extraits sous-module dossier dans votre référentiel, avant de tenter une sous-module de mise à jour.
Ajoutant
git rm --cached <submodule-directory>
m'aide sur gitlab: