Unterschiede zwischen Git-Submodul und Teilbaum

Lesezeit: 4 Minuten

Was sind die konzeptionellen Unterschiede zwischen der Verwendung von git submodule und subtree?

Was sind jeweils die typischen Szenarien?

  • Dies beantwortet möglicherweise nicht alle Ihre Fragen, ist aber eine interessante Lektüre zu diesem Thema: blogs.atlassian.com/2013/05/…

    – Hacken

    2. August 2015 um 8:12 Uhr

  • Eine ähnliche Frage ist stackoverflow.com/questions/571232/…

    – Michael Freigeim

    1. Mai 2016 um 3:20 Uhr

  • „Alternativen zu Git-Submodulen? “: stackoverflow.com/questions/6500524/…

    – Glanz

    21. Dezember 2018 um 14:28 Uhr


Submodul ist Link;

Teilbaum ist Kopie

Unterschiede zwischen Git Submodul und Teilbaum
VonC

  • Submodul eignet sich besser für die komponentenbasierte Entwicklung, bei der Ihr Hauptprojekt von einer festen Version einer anderen Komponente (Repo) abhängt.
    Sie behalten nur Referenzen in Ihrem übergeordneten Repo (gitlinksspezielle Einträge im Index)

Was ist, wenn ich möchte, dass die Links immer auf den HEAD des externen Repos verweisen?

Mit:

Ö git submodule add -b <branch> <repository> [<path>]. (um eine Verzweigung anzugeben, der gefolgt werden soll)
Ö git submodule update --remote wodurch der Inhalt des Submoduls auf den neuesten HEAD aktualisiert wird <repository>/<branch>standardmäßig origin/master. Ihr Hauptprojekt verfolgt weiterhin die Hashes des HEAD des Submoduls, selbst wenn --remote wird zwar verwendet.


  • Teilbaum ist eher eine systembasierte Entwicklung, bei der Ihr gesamtes Repo alles auf einmal enthält und Sie jeden Teil ändern können.
    Siehe ein Beispiel in dieser Antwort.

Plus, wie von philb in den Kommentaren erwähnt, git subtree ist ein contrib/im Gegensatz zu git submodule (Kernbefehl)

  • Ihre Antwort scheint gegen die hier gewählte Antwort zu verstoßen: stackoverflow.com/questions/10443627/…

    – Nathan H

    6. August 2015 um 9:10 Uhr

  • @NathanH dies (die Möglichkeit, HEAD zu verfolgen) wurde ein Jahr später hinzugefügt (März 2013, git 1.8.2: github.com/git/git/blob/…)

    – VonC

    6. August 2015 um 9:11 Uhr

  • Ich sehe, dass das Followship-Verhalten des Submoduls auch in Ihrer anderen Antwort erwähnt wird. In diesem Fall wollen Sie wohl sagen, dass immer auf den HEAD eines Submoduls gezeigt wird, indem beide verwendet werden add -b und --remote danach auf die Update-Befehle, gemäß der Submodul-Update-Dokumentation. In diesem Fall ist die -b wirklich noch erforderlich für den folgenden LEITER des Meisters?

    – Matanster

    29. Oktober 2015 um 14:20 Uhr


  • @matt der -b wird verwendet, um die richtigen .gitmodule-Metadaten für das Submodul zu generieren (dies entspricht einer .gitmodule-Metadatendatei). git config -f .gitmodules submodule.<path>.branch <branch>).

    – VonC

    29. Oktober 2015 um 15:33 Uhr


  • @philb Guter Punkt. Ich habe Ihren Kommentar zur besseren Sichtbarkeit in die Antwort aufgenommen.

    – VonC

    12. Juli 2021 um 17:10 Uhr

Unterschiede zwischen Git Submodul und Teilbaum
Niklas P

Der konzeptionelle Unterschied ist:

Mit git-Submodule Normalerweise möchten Sie ein großes Repository in kleinere aufteilen. Die Art, auf ein Submodul zu verweisen, ist Maven-Stil – Sie verweisen auf ein einzelnes Commit aus dem anderen (Submodul-)Repository. Wenn Sie eine Änderung innerhalb des Submoduls benötigen, müssen Sie innerhalb des Submoduls ein Commit/Push durchführen, dann das neue Commit im Haupt-Repository referenzieren und dann die geänderte Referenz des Haupt-Repositorys committen/pushen. Auf diese Weise müssen Sie für den vollständigen Build Zugriff auf beide Repositories haben.

Mit git-Teilbaum Sie integrieren ein anderes Repository in Ihr eigenes, einschließlich seiner Historie. Nach der Integration ist die Größe Ihres Repositorys also wahrscheinlich größer (also ist dies keine Strategie, um Repositorys kleiner zu halten). Nach der Integration besteht keine Verbindung zum anderen Repository, und Sie benötigen keinen Zugriff darauf, es sei denn, Sie möchten ein Update erhalten. Diese Strategie dient also eher der Wiederverwendung von Code und Verlauf – ich persönlich verwende sie nicht.

  • Aber mit git subtree du kannst ja auch noch schieben – wenn du wolltest – oder?

    – Benutzer

    21. Januar 2018 um 23:22 Uhr

  • @lxx Wenn Sie die Repository-URL kennen …

    – Franklin Yu

    24. Januar 2018 um 23:05 Uhr

  • @FranklinYu Warum sollte er das nicht wissen? können diese Informationen nicht aus den lokalen Git-Metadaten abgerufen werden?

    – adi518

    19. März 2018 um 22:53 Uhr

  • @adi518 Ja, wenn Sie derjenige sind, der den Teilbaum erstellt hat. Wenn Sie Ihr Repository jedoch auf GitHub verschoben und andere es geklont haben, glaube ich nicht, dass er/sie automatisch die Unterbaum-URL kennt.

    – Franklin Yu

    20. März 2018 um 4:33 Uhr

  • @NiklasP – können Sie näher auf “auf das neue Commit im Haupt-Repository verweisen” eingehen? Das ist der eine Schritt, bei dem mir nicht klar ist, wie ich ihn ausführen soll, und daher verstehe ich “veränderte Referenz” auch nicht.

    – Robert Öschler

    4. April 2018 um 16:07 Uhr

Untermodul

Wenn Sie ein Hauptrepo auf eine Remote verschieben, werden die Dateien des Untermoduls nicht verschoben

Teilbaum

Das Verschieben eines Hauptrepos auf die Ferne verschiebt die Dateien des Unterbaums

964990cookie-checkUnterschiede zwischen Git-Submodul und Teilbaum

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy