2012-12-12 13 views
18

Ich habe eine git Repo mit einem git Submodul drin. Das Submodul wird auf bitbucket gehostet. Ich möchte meine lokale Kopie des Submoduls auf seinen letzten Commit aktualisieren. Ich müde "git Submodul Update" aber das tut nichts. Also habe ich versucht, den Submodul-Ordner zu löschen und dann "git Submodul init" zu tun. Allerdings zieht es einfach das initiale Submodul Commit, nicht das letzte.git Submodul init nicht ziehen neuesten commit

Wie kann ich mein lokales Submodul auf den neuesten Commit aktualisieren?

Antwort

26

Git macht genau das, was es tun soll. git submodule update setzt Ihr Submodul auf das, was der aktuelle Commit im Parent-Repo spezifiziert, an dem das Submodul sein sollte. Auf diese Weise können Sie eine andere Verzweigung, ein älteres Commit oder ein älteres Tag auschecken und dann git submodule update ausführen, und das Submodul wird auf das festgelegt, was diese Referenz erwartet, damit Ihre gesamte Lösung ihre Abhängigkeiten erfüllt.

Was Sie tun müssen, ist:

cd mysubmoduledir 
git fetch 
git checkout master # or any other branch that you need the latest of 
git merge origin/master 
cd - # go back to the top repo 
git status # should show that your submodule changed 
git add mysubmoduledir 
git commit -m "Updated my solution to use latest sub project." 

eine kürzere Version ist:

cd mysubmoduledir 
git pull # assumes you are already on the branch you need to be on 
cd - 
git commit -am "Updated submodule" # assumes you had no other modified files 

Das Wort "Update" ist nicht das beste für dieses Submodul Befehl. Es bedeutet wirklich "zeigen Sie das Submodul auf das Commit, das das Commit des Parent-Repos erwartet".

Aktualisieren eines Submoduls zu einem anderen Commit (muss nicht die neueste sein) erfordert, dass Sie in dieses Verzeichnis cd, manipulieren Sie es wie ein regulärer Git Repo, so dass die aktuelle Commit ist was Sie wollen, dann wieder raus und Übernehmen Sie diese Änderung auf dem Repo der obersten Ebene.

+0

Was für ein lächerlicher Name für einen Befehl ?! Es sollte offensichtlich sein, git submodule etadpu –

+0

Nachdenken über diese "git submodule ilikepancakes" würde wahrscheinlich genauso viel Sinn machen. Und wenn jemand anderer Meinung ist, lies bitte eine kluge Präsentation über das Design von Kernel-Space-Apis: http://man7.org/conf/lca2013/Why_kernel_space_sucks-2013-02-01-printable.pdf –

+0

Weitere Details zur Verwendung von 'git Submodul ': https://chrisjean.com/git-submodules-adding-using-removing-and-updating/ –

5

Jedes Git-Commit, das ein Submodul enthält, ist mit einem bestimmten Commit im Submodul-Repository verknüpft.

Der Befehl git submodule update wird bereitgestellt, um die ausgecheckte Version des Submoduls auf den Commit zu aktualisieren, der für die aktuelle Version des übergeordneten Repositorys aufgezeichnet wird. Dies ist möglicherweise eine ältere Version als die, die Sie derzeit in diesem Submodul ausgecheckt haben, z. B. wenn Sie eine alte Version des übergeordneten Repositorys untersuchen, in der eine ältere Version des Submoduls verwendet wurde.

Um eine neuere Version des Submoduls zu erhalten, wechseln Sie in dieses Verzeichnis und aktualisieren Sie es wie jedes andere Git-Repository (z. B. Ziehen aus dem Upstream-Repository). Wenn Sie neue Commits vornehmen oder aus einem anderen Repository als dem, das Sie als Quelle für das Submodul verwenden, stammen, müssen Sie Ihre Änderungen übernehmen. Danach können Sie zum übergeordneten Repository zurückkehren und die Änderung an das Submodul übergeben, um den neuen Submodul-Commit aufzuzeichnen, den Sie jetzt für das Submodul in der aktuellen Version sowie für zukünftige Versionen verwenden, bis Sie ein weiteres Update durchführen.

2

Versuchen Sie einfach den folgenden Befehl, nachdem Sie Ihre Submodule hinzugefügt haben.

für git v 1.8.x

git submodule update --init --recursive --remote 

für v1.7.x:

git submodule update --init --recursive oder git pull --recurse-submodules

für v1.6.x

git submodule foreach git pull origin master 

, um Ihre Git-Version zu überprüfen.

git version 
Verwandte Themen