Was wahrscheinlich passiert ist, dass die master
Ihres Submoduls nicht die Version ist, die Ihr Repo halten möchte.
Ihr Modul in die Fassung gesetzt, dass der Halt Repo will:
holding/ $ git submodule update
die gewünschte SHA1 des Submoduls Check:
holding/ $ git submodule # (1)
<list of all submodules, with the desired SHA1>
prüfen, was master
Ihre Submodul lautet:
holding/ $ cd sub
holding/sub $ git checkout master
holding/sub $ git log -1 # (2)
Ist die SHA1
bei (2) das gleiche wie das, was Sie bei (1) gesehen haben? Wenn nicht, ist das dein Problem. Etwas ist im Master des Submoduls passiert, aber diese neuen Änderungen wurden nicht in das Holding Repo aufgenommen.
Das Holding Repo behält eine SHA1
als Verweis auf die Version des Submoduls zu verwenden. Wenn im Repo des Submoduls eine Weiterentwicklung stattfindet, behält das Holding Repo immer noch die gleiche Version bei, es aktualisiert das Submodul nicht automatisch.
Wenn Sie eine neuere Version (z. B. master
) des Submoduls auschecken und dann zum Holding Repo zurückkehren, wird Ihnen git status
mitteilen, dass Sie ein neues Commit in Ihrem Submodul ausgecheckt haben. Diese Änderung des aktuellen Submodul Commit kann in Ihrem Holding Repo begangen werden. Das würde aktualisieren, welche Version des Submoduls mit diesem Festhalten verwendet werden soll.
Wenn Sie die Arbeit an dem Submodul fortgesetzt werden sollen, von der Version, die der Holding-Repo will, müssen Sie einen neuen Zweig erstellen. master
spiegelt die weitere Entwicklung im Repo des Submoduls wider, also arbeiten Sie entweder von master
(und schließen sowohl diese Weiterentwicklung als auch Ihre neue Arbeit ein), oder Sie erstellen einen neuen Zweig aus dem abgetrennten Kopf, auf den sich das Halten bezieht.
Wenn Sie master
auf dem gelösten Kopf erzwingen wollten, der durch Halten gehalten wird, was würde mit den commits geschehen (weitere Entwicklung), die zwischen dem gelösten Kopf und master
erzeugt wurden? Sie wären verloren. Und was passiert beim nächsten Mal, wenn Sie Ihre bewegte master
auf origin
schieben? Es würde einen Konflikt geben, da Ihr lokaler master
von origin
s divergiert hätte.
Danke für die Info. Klonen ohne --recursive und dann 'cd Helpers; git Submodul init; git submodule update "etwas anderes machen? Gibt es einen einfachen Weg, um ein Submodul zurück zu bekommen, wo das Elternprojekt es sagt, sei auf 'Master' (damit ich mich dazu verpflichten kann), aber nicht abgeholt, so dass es nicht weiß, dass es mehr Arbeit gibt in der Zukunft? –
Ein rekursiver Klon macht dasselbe wie das Submodul init & update. Jedes Mal, wenn Sie ein Submodul-Update ausführen, wird HEAD auf das Commit zurückgesetzt, das im Index angegeben ist, und jedes Mal, wenn HEAD aus irgendeinem Grund nicht auf dieses Commit zeigt, erhalten Sie diese Nachricht. Die einzige Möglichkeit, diese Nachricht verschwinden zu lassen, besteht darin, ein Submodul-Update durchzuführen oder das Commit im Index zu aktualisieren (git add; git commit). Mit dem Flag --ignore-submodules (http://www.nils-haldenwang.de/frameworks-and-tools/git/how-to-ignore-changes-in-git-submodules) können Sie auch Submodule im Git-Status ignorieren) –