434 Stimmen

Aktualisieren eines Submoduls auf den neuesten Stand

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 bearbeitete einige Klassen auf der Bibliothek, die in der Repo A ist, ich auf der Remote-Repo geschoben, so dass die Bibliothek (Repo A) aktualisiert wird.

Diese Updates spiegeln nicht auf die "Referenz" (das Submodul) das Submodul bezieht sich auf eine frühere Commit.... was sollte ich tun, um das Submodul auf Git zu aktualisieren?

4 Stimmen

Zuerst tun: git submodule update --remote --merge um sicherzustellen, dass die Submodule auf den neuesten Hash verweisen (gültig ab Git 1.8). Übertragen Sie dann den Zeiger auf den neuen Hash Ihrer Submodule, indem Sie die Submodule übertragen: git add proj/submodule dann git commit -m 'adding new submodule' Meine Lieblingsantwort ist diese: stackoverflow.com/a/42175412/1601580

6voto

Francesco Borzi Punkte 48103

Keine der oben genannten Antworten hat bei mir funktioniert.

Dies war die Lösung, von der Elternteil Verzeichnislauf:

git submodule update --init;
cd submodule-directory;
git pull;
cd ..;
git add submodule-directory;

jetzt können Sie git commit y git push

0 Stimmen

Ihre Antwort war ähnlich wie die vorherige, mit Ausnahme von diesem: hinzugefügt Submodul ist manchmal nicht auf einen Zweig zeigen, müssen Sie nicht das Submodul auf jede Änderung hinzufügen

4voto

XtraSimplicity Punkte 5136

Einige der anderen Antworten empfehlen das Zusammenführen/Übertragen im Verzeichnis des Submoduls, was IMO ein wenig unübersichtlich werden kann.

Angenommen, der entfernte Server heißt origin und wir wollen die master Zweig des/der Submodule(s) zu verwenden:

git submodule foreach "git fetch && git reset --hard origin/master"

Hinweis: Dies führt einen Hard-Reset für jedes Submodul durch -- wenn Sie dies nicht wünschen, können Sie die --hard zu --soft .

1voto

AnneTheAgile Punkte 9350

Mein Projekt sollte die "neueste" Version für das Submodul verwenden. Unter Mac OSX 10.11, Git-Version 2.7.1, musste ich nicht in den Ordner meines Submoduls gehen, um dessen Commits zu sammeln. Ich habe einfach eine normale

git pull --rebase 

auf der obersten Ebene, und es hat mein Submodul korrekt aktualisiert.

0voto

Andys Antwort funktionierte bei mir, indem ich $path entkommen ließ:

git submodule foreach "(git checkout master; git pull; cd ..; git add \$path; git commit -m 'Submodule Sync')"

0 Stimmen

Wahrscheinlich der Grund dafür @Andy Webov's Antwort kein Escaping erforderte, war, dass sie einfache Anführungszeichen um den Pfad herum verwendeten, z. B. '$path'

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X