Wie passe ich meine Strategie svn: externals an Git-Submodule an?

Ich habe Probleme herauszufinden, wie ich meine Denkweise auf git ändern kann, und bin auf das folgende Problem gestoßen. Ich habe die Situation, in der wir eine gemeinsame Engine und mehrere Projekte haben, die die Engine verwenden. Interne Entwicklungsteams und Teams von Drittanbietern arbeiten möglicherweise an Projekten, die die gemeinsam genutzte Engine verwenden, und möchten HEAD der gemeinsam genutzten Engine so oft wie möglich während der Entwicklung verwenden, bis wenige Wochen vor der Auslieferung, wo die gemeinsam genutzte Engine gekennzeichnet wird und verzweigt, und das Projekt wird dann diesen Zweig verwenden. In der Regel arbeiten die Projektteams jeweils nur an einem Projekt. Während des Debuggens oder des Hinzufügens von Funktionen können jedoch Änderungen an der gemeinsam genutzten Engine vorgenommen werden. Wenn sie diese Änderungen festschreiben, wird unser Build-System ausgeführt, um etwaige Probleme mit dem Festschreiben festzustellen.

Ich (glaube ich) möchte dasselbe Modell für ein neues Projekt / eine neue Firma verwenden. In svn war die Struktur ungefähr so: shared_engine

project_in_dev-+
               +- svn:external shared_engine:head
project_about_to_ship-+
                      +-svn:external shared_engine_rev1_branch

Das hat sehr gut funktioniert:

Projektentwickler können mit einem einzigen Befehl alle Abhängigkeiten überprüfen, die sie benötigen würden.Projektentwickler konnten problemlos Motorarbeiten ausführen und sich auf die gemeinsam genutzte Engine festlegen.Wir können die gemeinsam genutzte Engine, die das Projekt verwendet, problemlos mit externen Komponenten und Revisionen ändern.Engine-Updates waren mit Ihrem täglichen "Update aus dem Root-Projekt" einfach zu bekommen.

OK, jetzt bin ich zu git gewechselt, und Submodule scheinen die neue Art zu sein, mit externem Code umzugehen, aber es scheint, als ob ich einige Funktionen verliere.

Es ist ein mehrstufiger Prozess, um alle Abhängigkeiten des Projekts zu ermitteln. Projektentwickler müssen einen Git-Klon ausführen und dann ein Git-Submodul-Init / Git-Submodul-Update durchführen --recursive Das Aktualisieren des Root-Projekts und des Submoduls erfolgt in mehreren Schritten. Wenn also Änderungen am Root-Projekt von einem anderen Entwickler vorgenommen werden, die den Änderungen am Submodul entsprechen, erhalten Sie den entsprechenden Code nicht sofort und können sehr verwirrt sein.Das Submodul ist an ein bestimmtes Commit gebunden. Wenn Sie Änderungen am Submodul vornehmen, können Sie Probleme damit haben, dass es mit dem Kopf der gemeinsam genutzten Engine funktioniert. Ich habe keine Kontrolle darüber, welche Version der gemeinsam genutzten Engine der Projektentwickler ausgecheckt hat, ohne Anweisungen zu geben, auf welche Version @ aktualisiert werden sol

Also meine Fragen sind wie folgt:

Erstens, sind die obigen Annahmen über Submodule korrekt? Es scheint auf dem zu basieren, was ich gelesen habe, aber ich bin nicht 100% sicher, da ich immer noch herausfinde, gitWenn meine Annahmen richtig sind, gehe ich das Problem mit dem richtigen Prozess an? Muss ich mein Denken anpassen, wenn ich git benutze? Mit anderen Worten, gibt es eine andere Möglichkeit, das zu tun, was ich versuche und was ich anders über den Prozess denken muss?Angenommen, ich habe die ersten beiden nicht durchgebrannt, und Submodule tun nicht, was ich will, was wird? Ich habe über Teilbaumzusammenführungen gelesen, aber diese scheinen auch nicht genau zu stimmen, da es so aussieht, als ob ich keine Änderungen am gemeinsam genutzten Code zurück in das Repository bekommen kann.

ielen Dank für Ihre Hilfe und Geduld. Wenn es nicht offensichtlich ist, bin ich ein Neuling, und ich mag es und möchte es annehmen, aber ich habe immer noch einige konzeptionelle Missverständnisse, weil ich wahrscheinlich durch die jahrelange Verwendung von zentralen Repos einen Hirnschaden erlitten habe. Ich will lernen! Außerdem habe ich den ganzen Tag gearbeitet und mir verschiedene Blog-Posts, Stackoverflow-Fragen usw. angeschaut, und ich verstehe es immer noch nicht. Ich muss es offensichtlich Schritt für Schritt für meine Situation formulieren. Ich habe keine Kollegen, die sich danach erkundigen könnten. Gibt es Benutzergruppen in der Gegend von Seattle, in denen es möglicherweise Git-Gurus gibt? :)

Antworten auf die Frage(2)

Ihre Antwort auf die Frage