2628 Stimmen

Einfacher Weg, die aktuellsten aller Git-Submodule zu ziehen

Wir verwenden Git-Submodule, um einige große Projekte zu verwalten, die von vielen anderen Bibliotheken, die wir entwickelt haben, abhängig sind. Jede Bibliothek ist ein separates Repo, das als Submodul in das abhängige Projekt eingebracht wird. Während der Entwicklung wollen wir oft einfach die neueste Version jedes abhängigen Submoduls holen.

Verfügt Git über einen eingebauten Befehl, um dies zu tun? Wenn nicht, wie wäre es dann mit einer Windows-Batch-Datei oder ähnlichem, die das erledigen kann?

0 Stimmen

git-deep sollte dabei helfen.

17 Stimmen

@Brad wollen Sie Ihre Kopien von Submodulen auf die im Master-Projekt genannten Commit-Revs aktualisieren oder wollen Sie den letzten HEAD-Commit von jedem Submodul ziehen? Die meisten Antworten hier beziehen sich auf Ersteres; viele Leute wollen Letzteres.

1 Stimmen

Sie können diese Antwort mit Git flow with submodules hilfreich finden stackoverflow.com/a/70910397/9566462

7voto

seoul Punkte 872

Git für Windows 2.6.3 :

git submodule update --rebase --remote

0 Stimmen

Das ist das Einzige, was bei mir funktioniert hat. Ich konnte nicht einmal initiieren oder aktualisieren, da der Zeiger des Submoduls auf eine Version zeigte, die nicht mehr in der Fernbedienung vorhanden war

5voto

Von der obersten Ebene im Repo:

git submodule foreach git checkout develop
git submodule foreach git pull

Dies schaltet alle Zweige auf develop um und zieht die neuesten

0 Stimmen

Haben Sie so etwas wie eine Everything sln-Datei, die alle Projektreferenzen in den Baum einfügt? Welchen Fehler sehen Sie? Können Sie auch Ihre Gitignore-Datei überprüfen

1 Stimmen

git submodule foreach git pull origin master Ich musste den Zweig, den ich abrufen wollte, anhängen. Ansonsten hat es perfekt funktioniert.

0 Stimmen

Sie möchten vielleicht Folgendes hinzufügen --recursive zu verwenden, um in Untermodule innerhalb von Untermodulen zu rekursieren. Beispiel: git submodule foreach --recursive git pull

3voto

Tom Punkte 699

Dazu habe ich Folgendes angepasst gahooa 's obige Antwort :

Integrieren Sie es mit einem Git [alias] ...

Wenn Ihr übergeordnetes Projekt etwas wie dieses in .gitmodules :

[submodule "opt/submodules/solarized"]
    path = opt/submodules/solarized
    url = git@github.com:altercation/solarized.git
[submodule "opt/submodules/intellij-colors-solarized"]
    path = opt/submodules/intellij-colors-solarized
    url = git@github.com:jkaving/intellij-colors-solarized.git

Fügen Sie etwas wie das folgende in Ihre .gitconfig ein

[alias]
    updatesubs = "!sh -c \"git submodule init && git submodule update && git submodule status\" "

Um Ihre Submodule zu aktualisieren, führen Sie dann aus:

git updatesubs

Ich habe eine Beispiel davon in meinem Umgebung Setup Repo .

3voto

Pellet Punkte 2056

Alles, was Sie jetzt tun müssen, ist eine einfache git checkout

Stellen Sie nur sicher, dass Sie es über diese globale Konfiguration aktivieren: git config --global submodule.recurse true

2voto

kenorb Punkte 134883

Hier ist die Befehlszeile, um aus allen Git-Repositories zu ziehen, unabhängig davon, ob sie Submodule sind oder nicht:

ROOT=$(git rev-parse --show-toplevel 2> /dev/null)
find "$ROOT" -name .git -type d -execdir git pull -v ';'

Wenn Sie es in Ihrem Top-Git-Repository ausführen, können Sie die "$ROOT" en . .

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