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 = git@github.com:interstar/BEACHhtml.git

Dans mes .gitmodules j'ai ceci:

[submodule "external_libraries/BEACHhtml"]
path = external_libraries/BEACHhtml
url = git@github.com:interstar/BEACHhtml.git

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

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.


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

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.


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.


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


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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.