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

87

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

J'ai un projet qui comprend 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, j'ai fait ce que je pensais devoir: "git submodule init", j'ai fait apparaître le répertoire du sous-module, mais il est vide.

Si j'essaye 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-t-il une idée de ce qui manque?

interstar
la source

Réponses:

189

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. Il s'agit d'un bogue dans git: http://git.661346.n2.nabble.com/BUG-git-submodule-update-is-not-fail-safe-td7574168.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 retrait précédent, supprimez-le et mettez à jour à nouveau le problème.

Han He
la source
1
pour moi, c'était un git-fetch pendu qui gardait le dossier verrouillé
Mihai Timar
32
J'ai dû supprimer à la fois l'arbre de travail du sous-module ( ext/blah) et le dossier correspondant sous le GIT_DIR( .git/modules/ext/blah).
Tobu
2
Dans mon cas particulier, j'ai git submodule updatecontinué à échouer sur mon serveur CI parce qu'il voulait que quelqu'un accepte les clés RSA (le serveur ci utilise normalement une connexion https et c'était la première fois qu'un sous-module établissait une connexion ssh). J'espère que cela permettra à quelqu'un de se gratter la tête une heure!
Maverik
8
En 2016, ce bug persiste :(
Paulo Neves
6
Enregistrement 2017, toujours présent.
william.taylor.09
4

J'ai eu ce problème (réseau floconneux, donc j'ai été abandonné à la caisse du sous-module comme celui-ci) et je l'ai résolu en créant ce script (nommé git-submodule-fixpour que je puisse l'exécuter comme git submodule-fix)

#!/bin/bash 

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

Si vous obtenez cela par exemple à partir 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
Epatel
la source
3

Résolu en supprimant 2 répertoires et en récupérant le sous-module:

  1. Allez à external_libraries/BEACHhtmlet regardez dans le .gitfichier. Son contenu devrait être quelque chose commegitdir: ../../.git/modules/external_libraries/BEACHhtml
  2. Supprimez les répertoires external_libraries/BEACHhtmlet .git/modules/external_libraries/BEACHhtml.

A partir de maintenant, il git submodule updatefonctionne sans erreurs.

Lu55
la source
vous devrez peut-être exécuter git submodule initavant git submodule updatepour que le sous-module soit réinitialisé, cela fonctionnera.
Pellet
1

Si vous lisez en 2019 ou plus tard, mettez simplement à jour le client git. A travaillé pour moi.

vehsakul
la source
0

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

Je soupçonne que vous êtes passé à une branche ou à une révision plus ancienne où le sous-module n'a pas été défini.

J'espère que cela t'aides

Adam Dymitruk
la source
0

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 fonctionnait bien.

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

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

David Lukac
la source