Git Submodule auf Master

7

Ich bin neu bei Git Submodulen, und ich bemerke, dass sie sich immer auf bestimmte Commits beziehen.

Gibt es eine Möglichkeit, dass Submodule eines Superprojekts immer auf den Kopf des Master-Zweiges verweisen, so dass "git submodule update" oder "git pull" im Superprojekt einfach "git pull" auf allen Submodulen ausführt.

Danke.

    
Sam 15.01.2011, 17:25
quelle

2 Antworten

11

Die kurze Antwort ist nein. Die Idee ist, dass Sie sicher wissen, dass ein bestimmtes Commit des Submoduls mit Ihrem Projekt funktioniert und dass Sie kein undefiniertes oder unerwartetes Verhalten durch sofortige Updates erhalten möchten. Ein Submodul wird direkt durch zwei Dinge repräsentiert: einen Eintrag in .gitmodules und einen Gitlink, der eine Referenz auf den SHA1 des gewünschten Commits des Submoduls ist. SHA1, nicht refname.

Was Sie fragen, ist wirklich, dass das Superprojekt keine Ahnung hat, was im Submodul ist. Denken Sie darüber nach: Verschiedene Klone Ihres Projekts könnten das Submodul zu unterschiedlichen Zeiten aktualisiert haben und dort mit verschiedenen Versionen davon enden, und dann, wenn Commits in Ihrem Projekt gemacht wurden, müssten sie verschiedene Commits im Submodul aufzeichnen. Wenn Sie zusammengeführt haben, müssen Sie wahrscheinlich ignorieren, was beide sagen und wahrscheinlich wieder ziehen. Das Ergebnis ist, dass Ihre Anfrage die gesamte Idee der Submodule vermeidet: zu wissen, was Sie haben. Wenn Sie sagen, dass Sie "Master" verwenden, würden Sie in zwei Monaten zurückkommen und keine Ahnung haben, was das bedeutet!

Wenn Sie immer den aktuellen Master-Zweig haben möchten, sollten Sie es lieber selbst machen. Schreiben Sie ein Skript, um alle Submodule einzubinden, und führen Sie es ab und zu, und übergeben Sie die aktualisierten Versionen. (Testen Sie zuerst!) Der Punkt hier ist, dass Sie bei Submodulen für jedes Superprojekt-Commit genau wissen müssen, welche Version des Subprojekts Sie verwenden. Sie haben die Wahl, wie oft Sie die Version des Submoduls aktualisieren möchten. Es kann täglich sein, wenn Sie möchten.

Die Alternative wäre, das Verzeichnis (die Verzeichnisse) für das Submodul (die Submodule) zu Ihrem gitignore hinzuzufügen und ein kleines Skript zu schreiben, um sie zu aktualisieren (und wahrscheinlich auch eines, um sie zu klonen). Dies würde Sie die Fähigkeit kosten zu wissen, welche Version Sie zu einem bestimmten Zeitpunkt in der Vergangenheit hatten.

    
Cascabel 15.01.2011, 17:38
quelle
10

Update 2013, seit git 1.8.2, kann ein Submodul einem Zweig folgen (und nicht nur auf einen festen Commit verweisen)

Siehe " git submodule tracking aktuell ".

(Originalantwort Januar 2011)

Das ist einer der Unterschiede zwischen Git Submodulen und (zum Beispiel) svn:externals .

Ein Submodul soll eine Menge von Dateien mit einem anderen Lebenszyklus sein, aus der Sie ein bestimmtes Commit auswählen, um an Ihrem eigenen Projekt (dem übergeordneten Repo) zu arbeiten.
Wenn dieses Submodul ein neues Commit veröffentlicht, sollten Sie nicht alles unterbrechen müssen, da Ihr Projekt aufgrund der neuesten Entwicklungen des Submoduls plötzlich nicht mehr kompiliert wird.

Wenn andererseits die beiden Dateien so eng miteinander verwandt sind, dass das Ändern von einer in der einen die Aktualisierung der anderen bedeutet, sollten sie wirklich Teil von * one repo sein.

    
VonC 15.01.2011 17:41
quelle

Tags und Links