Ich habe ein Projekt A, das eine Bibliothek ist und in einem Projekt B verwendet wird.
Beide Projekte A und B haben ein separates Repository auf Github, aber innerhalb von B haben wir ein Submodul von A.
Ich habe einige Klassen in der Bibliothek bearbeitet, die sich im Repo A befindet. Ich habe auf das Remote-Repo gedrückt, damit die Bibliothek (Repo A) aktualisiert wird.
Diese Aktualisierungen spiegeln nicht die "Referenz" (das Submodul) wider, auf die sich das Submodul auf ein vorheriges Commit bezieht. Was soll ich tun, um das Submodul auf Git zu aktualisieren?
quelle
git submodule update
wenn jemand anderes das projA aktualisiert hat (Sie erhalten eine neue Commit-ID).git push
?git push <remote> <branch>
zBgit push origin dev
.git submodule update
Funktioniert nur ohne Flags, wenn ein Commit gezogen wurde (in Projekt B), das die Refs auf die betreffenden Submodule (Projekt A) aktualisiert. Um Projekt B so zu aktualisieren, dass es aufHEAD
den Remote-Tracking-Zweig für Projekt A verweist, gehen Siegit submodule update --remote --merge
wie in der Antwort von Paul Hatcher unten gezeigt vor.Seit Git 1.8 kannst du das machen
Dadurch wird das Submodul auf das neueste Remote-Commit aktualisiert. Sie müssen die Änderung dann festschreiben, damit der Gitlink im übergeordneten Repository aktualisiert wird
Und dann pushen Sie die Änderungen, da ohne dies die SHA-1-Identität, die auf das Submodul zeigt, nicht aktualisiert wird und die Änderung für niemanden sichtbar ist.
quelle
git commit
, sehen es alle anderen immer noch nicht.On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
modified: SubmoduleA (new commits)
modified: SubmoduleB (new commits)
git add
vor dem Festschreiben bereitgestellt werden.Wenn Sie ein Submodul aktualisieren und es festschreiben, müssen Sie zum enthaltenen Repo oder übergeordneten Repo gehen und dort die Änderung hinzufügen.
zeigt so etwas wie:
Die Tatsache, dass das Submodul nicht synchron ist, kann auch mit gesehen werden
Die Ausgabe zeigt:
Das Pluszeichen zeigt an, dass Ihr Submodul vor die Stelle zeigt, auf die das Top-Repo erwartet.
Fügen Sie einfach diese Änderung hinzu:
und begebe es:
Wenn Sie Ihre Änderungen hochschieben, stellen Sie sicher, dass Sie zuerst die Änderung im Submodul und dann die Referenzänderung im äußeren Repo hochschieben. Auf diese Weise können Personen, die ein Update durchführen, immer erfolgreich ausgeführt werden
Weitere Informationen zu Submodulen finden Sie hier http://progit.org/book/ch6-6.html .
quelle
+
beim Ausführengit submodule
kein angezeigt wird , stellen Sie sicher, dass Sie die Submodule initialisiert und importiert haben. Die Befehle für diese sind ,git submodule init
undgit submodule update
, respectively.Einzeilige Version
quelle
Einige der anderen Antworten empfehlen das Zusammenführen / Festschreiben im Verzeichnis des Submoduls, was IMO etwas chaotisch werden kann.
Angenommen, der Remote-Server heißt
origin
und wir möchten denmaster
Zweig der Submodule, dann verwende ich normalerweise:git submodule foreach "git fetch && git reset --hard origin/master"
Hinweis: Dies wird ein Hard - Reset auf jedem Modul durchführen - wenn Sie dies nicht wünschen, können Sie ändern
--hard
zu--soft
.quelle
Mein Projekt sollte das 'neueste' für das Submodul verwenden. Unter Mac OS X 10.11, Git-Version 2.7.1, musste ich nicht in meinen Submodul-Ordner gehen, um seine Commits zu sammeln. Ich habe nur einen Stammgast gemacht
auf der obersten Ebene, und es hat mein Submodul korrekt aktualisiert.
quelle
Andys Antwort funktionierte für mich, indem er $ path entkam:
quelle
'$path'