web-dev-qa-db-fra.com

Sous-modules Git. Tirer dans un nouveau clone du super projet

D'ACCORD. Alors j'ai pensé que j'avais léché ça ... mais maintenant ...

J'ai un projet qui inclut une petite bibliothèque de GitHub en tant que sous-module. Dans la version originale de ce super projet, le sous-module fonctionne comme prévu.

Cependant, je viens de cloner le superprojet, de faire ce que je pensais devoir faire: "git submodule init", le répertoire du sous-module apparaît, mais il est vide.

Si j'essaie maintenant de faire

git submodule update

Je reçois

fatal: Needed a single revision 
Unable to find current revision in submodule path 'external_libraries/BEACHhtml'

Si j'essaye

git submodule foreach git pull

Je reçois

Entering 'external_libraries/BEACHhtml'
fatal: Where do you want to fetch from today?
Stopping at 'external_libraries/BEACHhtml'; script returned non-zero status.

Dans mon .git/config, j'ai ceci:

[submodule "external_libraries/BEACHhtml"]
    url = [email protected]:interstar/BEACHhtml.git

Dans mes .gitmodules, j'ai ceci:

[submodule "external_libraries/BEACHhtml"]
path = external_libraries/BEACHhtml
url = [email protected]:interstar/BEACHhtml.git

Quelqu'un a une idée de ce qui manque?

82
interstar

Il semble que maintenant (en 2019) l'installation du dernier client GIT pourrait résoudre le problème selon les commentaires ci-dessous. Cela devrait être la meilleure solution pour le moment.


J'ai le même problème que vous. Ceci est un bug dans git: http://lists-archives.com/git/785138-git-submodule-update-is-not-fail-safe.html

En bref, pour votre problème, essayez:

# rm -rf external_libraries/BEACHhtml
# git submodule update

Il semble qu'il y ait un problème avec le dossier de paiement précédent, supprimez-le et mettez à jour à nouveau le problème.

181
Han He

J'ai eu ce problème (réseau floconneux donc je suis tombé chèque de sous-module comme ça) et je l'ai résolu en faisant ce script (nommé le git-submodule-fix afin que je puisse l'exécuter en tant que git submodule-fix)

#!/bin/bash 

for arg 
do 
  echo $arg 
  find . -name "`basename $arg`" | grep "$arg\$" | xargs rm -fr
done

Si vous obtenez cela, c’est-à-dire d’un git submodule update

fatal: Needed a single revision
Unable to find current revision in submodule path 'some/submodule/path'

faire

git submodule-fix some/submodule/path
git submodule update
4
epatel

Résolu en supprimant 2 répertoires et en relançant le sous-module:

  1. Aller à external_libraries/BEACHhtml et se pencher sur .git fichier. Son contenu devrait être quelque chose comme gitdir: ../../.git/modules/external_libraries/BEACHhtml
  2. Supprimer les deux external_libraries/BEACHhtml et .git/modules/external_libraries/BEACHhtml répertoires.

À partir de maintenant git submodule update s'exécute sans erreur.

3
Lu55

J'ai eu le même problème avec un sous-module sur un projet. Lorsque j'ai essayé de cloner le sous-module séparément, cela a bien fonctionné.

J'ai essayé toutes les réponses ci-dessus, mais sans succès (mise à jour de sous-module git, ..., suppression des dossiers de sous-module, ...).

Le problème a disparu après la mise à jour de git (de Git-1.7.11-preview20120710) à la dernière version (vers Git-1.8.1.2-preview20130201) à ce moment-là. Étrangement, mes collègues avaient une version encore plus ancienne, travaillaient sans problème, mais ils étaient sur Mac. Je suis sur Win7 64bit.

0
David Lukac

utilisez un outil de comparaison pour comparer le clone original qui fonctionne et celui-ci. Aussi, qu'est-ce que git submodule sortie. Assurez-vous de bien indiquer la même branche dans chaque dépôt avant de le faire.

Je soupçonne que vous êtes passé à une branche ou à une version antérieure où le sous-module n'était pas défini.

j'espère que cela t'aides

0
Adam Dymitruk

Si vous lisez en 2019 ou plus tard, il suffit de mettre à jour le client git. Travaillé pour moi.

0
vehsakul