Git-Submodule. In einen neuen Klon des Superprojekts ziehen


87

OK. Also dachte ich ich hätte das geleckt ... aber jetzt ....

Ich habe ein Projekt, das eine kleine Bibliothek von GitHub als Submodul enthält. In der Originalversion dieses Superprojekts funktioniert das Submodul wie erwartet.

Ich habe jedoch gerade das Superprojekt geklont und getan, was ich dachte: "git submodule init", habe das Verzeichnis des Submoduls angezeigt, aber es ist leer.

Wenn ich es jetzt versuche

git submodule update

Ich bekomme

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

Wenn ich es versuche

git submodule foreach git pull

Ich bekomme

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

In meiner .git / config habe ich Folgendes:

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

In meinen .gitmodules habe ich Folgendes:

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

Hat jemand eine Idee, was fehlt?

Antworten:


188

Es scheint, dass jetzt (im Jahr 2019) die Installation des neuesten GIT-Clients das Problem gemäß den Kommentaren unten lösen könnte. Dies sollte vorerst die beste Lösung sein.


Ich habe das gleiche Problem wie du. Dies ist ein Fehler in git: http://git.661346.n2.nabble.com/BUG-git-submodule-update-is-not-fail-safe-td7574168.html

Kurz gesagt, versuchen Sie für Ihr Problem:

# rm -rf external_libraries/BEACHhtml
# git submodule update

Es scheint, dass mit dem vorherigen Checkout-Ordner etwas nicht stimmt. Entfernen Sie ihn und aktualisieren Sie das Problem erneut, um das Problem zu beheben.


1
Für mich war es ein gehängter Git-Fetch, der den Ordner gesperrt hielt
Mihai Timar

30
Ich musste sowohl das Submodul worktree ( ext/blah) als auch den passenden Ordner unter GIT_DIR( .git/modules/ext/blah) entfernen .
Tobu

2
In meinem speziellen Fall schlug git submodule updatemein CI-Server immer wieder fehl, weil er wollte, dass jemand die RSA-Schlüssel akzeptiert (der CI-Server verwendet normalerweise eine https-Verbindung und dies war das erste Mal, dass ein Submodul eine SSH-Verbindung herstellte). Hoffe, es erspart jemandem eine Stunde Kopfkratzen!
Maverik

8
Im Jahr 2016 geht dieser Fehler immer noch weiter :(
Paulo Neves

6
2017 einchecken, noch vorhanden.
william.taylor.09

4

Ich hatte dieses Problem (flockiges Netzwerk, so dass ich das Auschecken von Submodulen wie folgt fallen ließ) und löste es, indem ich dieses Skript erstellte (benannte es, git-submodule-fixdamit ich es ausführen konnte git submodule-fix).

#!/bin/bash 

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

Wenn Sie dies dh von einem bekommen git submodule update

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

machen

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

3

Gelöst durch Löschen von 2 Verzeichnissen und erneutes Abrufen des Submoduls:

  1. Gehen Sie zu external_libraries/BEACHhtmlund schauen Sie in die .gitDatei. Der Inhalt sollte so etwas wie seingitdir: ../../.git/modules/external_libraries/BEACHhtml
  2. Löschen Sie beide external_libraries/BEACHhtmlund .git/modules/external_libraries/BEACHhtmlVerzeichnisse.

Läuft ab sofort git submodule updatefehlerfrei.


Möglicherweise müssen Sie git submodule initvorher ausführen, git submodule updatedamit das Submodul neu initialisiert wird. Dann funktioniert dies.
Pellet

1

Wenn Sie 2019 oder später lesen, aktualisieren Sie einfach den Git-Client. Hat für mich gearbeitet.


0

Verwenden Sie ein Diff-Tool, um den funktionierenden Originalklon mit diesem zu vergleichen. Auch was gibt git submoduleaus. Stellen Sie sicher, dass Sie in jedem Repo auf denselben Zweig zeigen, bevor Sie dies tun.

Ich vermute, dass Sie zu einem Zweig oder einer älteren Version gewechselt haben, in der das Submodul nicht definiert wurde.

hoffe das hilft


0

Ich hatte das gleiche Problem mit einem Submodul in einem Projekt. Als ich versuchte, das Submodul separat zu klonen, funktionierte es gut.

Ich habe alle oben genannten Antworten ausprobiert, aber ohne Erfolg (Git-Submodul-Update, ..., Entfernen der Submodul-Ordner, ...).

Das Problem verschwand nach dem Update von Git (von Git-1.7.11-Preview20120710) auf die neueste Version (auf Git-1.8.1.2-Preview20130201) zu diesem Zeitpunkt. Seltsamerweise hatten meine Kollegen eine noch ältere Version, arbeiteten ohne Probleme, aber sie waren auf dem Mac. Ich bin auf Win7 64bit.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.