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

556voto

Kjuly Punkte 33339

Geben Sie das Verzeichnis des Submoduls ein:

cd projB/projA

Ziehen Sie das Repo aus Ihrem Projekt A (wird no den Git-Status des übergeordneten Projekts B aktualisieren):

git pull origin master

Gehen Sie zurück zum Root-Verzeichnis und überprüfen Sie die Aktualisierung:

cd ..
git status

Wenn das Submodul zuvor aktualisiert wurde, wird etwas wie unten angezeigt:

# Not currently on any branch.
# Changed but not updated:
#   (use "git add ..." to update what will be committed)
#   (use "git checkout -- ..." to discard changes in working directory)
#
#       modified:   projB/projA (new commits)
#

Übertragen Sie dann die Aktualisierung:

git add projB/projA
git commit -m "projA submodule updated"

アップデイト

Wie @paul bemerkte, können wir seit Git 1.8

git submodule update --remote --merge

um das Submodul auf den neuesten Remote-Commit zu aktualisieren. Das wird in den meisten Fällen praktisch sein.

43 Stimmen

Übrigens, wenn Sie nicht der Eigentümer des Submoduls sind, können Sie einfach git submodule update wenn jemand anderes das projA aktualisiert hat (Sie erhalten eine neue Commit-ID).

0 Stimmen

Ich besitze das Submodul Main Repo (Projekt A), aber ich bin ein Committer im Projekt B.

0 Stimmen

@Kjuly Wie kann man nach dem Commit die Daten an die Gegenstelle übertragen? Ist es einfach git push ?

196voto

Paul Hatcher Punkte 6026

Seit Git 1.8 können Sie

git submodule update --remote --merge

Dadurch wird das Submodul auf den neuesten Remote-Commit aktualisiert. Sie müssen dann die Änderung hinzufügen und übertragen, damit der Gitlink im übergeordneten Repository aktualisiert wird:

Erstens: git add it

git add project/submodule_proj_name

dann git commit es

git commit -m 'gitlink to submodule_proj_name was updated'

das Git-Push es

git push

Und dann pushen Sie die Änderungen, da sonst die SHA-1-Identität, die auf das Submodul verweist, nicht aktualisiert wird und die Änderung somit für andere nicht sichtbar ist.

1 Stimmen

Auch wenn ich git commit alle anderen sehen es 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)

1 Stimmen

Haben Sie einen "git push" nach Ihrem Commit gemacht, bedenken Sie, dass ein Commit nur Ihr lokales Repository ändert, Sie müssen es auf das Remote-Repository pushen, damit alle anderen es sehen können

3 Stimmen

Was in dieser Antwort fehlt (aber in anderen Antworten unten erwähnt wird): die aktualisierten Submodule müssen mit git add bevor Sie sich festlegen.

50voto

Adam Dymitruk Punkte 116211

Wenn Sie ein Submodul aktualisieren und dazu ein Commit machen, müssen Sie zu dem enthaltenden oder einem übergeordneten Repo gehen und die Änderung dort hinzufügen.

git status

wird etwas angezeigt wie:

modified:
   some/path/to/your/submodule

Die Tatsache, dass das Submodul nicht synchronisiert ist, kann auch mit

git submodule

wird die Ausgabe zeigen:

+afafaffa232452362634243523 some/path/to/your/submodule

Das Plus zeigt an, dass Ihr Submodul vor dem Punkt liegt, auf den das Top Repo es erwartet.

fügen Sie einfach diese Änderung hinzu:

git add some/path/to/your/submodule

und übertragen sie:

git commit -m "referenced newer version of my submodule"

Wenn Sie Ihre Änderungen hochladen, stellen Sie sicher, dass Sie zuerst die Änderung im Submodul hochladen und dann die Referenzänderung im äußeren Repo. Auf diese Weise können Leute, die aktualisieren, immer erfolgreich die

git submodule update

Weitere Informationen zu Submodulen finden Sie hier http://progit.org/book/ch6-6.html .

0 Stimmen

Wenn Sie keine + wenn Sie git submodule vergewissern Sie sich, dass Sie die Submodule initialisiert und importiert haben. Die Befehle dafür sind git submodule init y git submodule update .

23voto

Andy Webov Punkte 481

Einzeilige Version

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

7voto

KushalSeth Punkte 1772

Lösung 1

Um es einfach zu machen.

Führen Sie diesen Befehl aus, um die neueste Version des Submoduls zu erhalten:

git submodule update --remote --merge

or 

git submodule update --remote

Nun müssen wir die Referenz in unserem übergeordneten Projektarchiv aktualisieren, was mit diesem Befehl geschehen kann:

git add <<submodulesfoldername>>

Hinweis: <> == Name meines Untermodulordners git add sub-modules (denken Sie daran, Ihren Code zu committen und zu pushen, dann wäre die Referenz der letzten Commit hinzugefügt worden)

enter image description here

Lösung 2

Wenn die obige Lösung nicht ausreicht, versuchen Sie Folgendes:

git submodule update --init --recursive

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