Verschachtelte Git-Repositories?

Lesezeit: 5 Minuten

Verschachtelte Git Repositories
Jeremy Raymond

Kann ich Git-Repositories verschachteln? Ich habe:

 /project_root/
 /project_root/my_project
 /project_root/third_party_git_repository_used_by_my_project

Macht es Sinn git init/add der /project_root um die Verwaltung von allem vor Ort zu erleichtern oder muss ich es verwalten my_project und der Drittanbieter separat?

1646644688 785 Verschachtelte Git Repositories
Greg Hewgill

Möglicherweise suchen Sie nach dem Git-Feature namens Submodule. Diese Funktion hilft Ihnen bei der Verwaltung abhängiger Repositories, die in Ihrem Haupt-Repository verschachtelt sind.

  • Der Blog chrisjean.com scheint nicht aktuell zu sein, nur weil ich versucht habe, ihm zu folgen. Der Wiki-Beitrag von Greg ist vielleicht etwas komplizierter, aber als Git-Neuling bevorzuge ich präzise statt einfach…

    – Salbei

    21. Juli 2011 um 16:12 Uhr

  • Der Blog scheint jetzt gut zu funktionieren, und leider für Sage scheinen die 34 (jetzt 35) Up-Votes für den Kommentar zuzustimmen, dass der Blog-Artikel einen Wert hat. Es stellt sich heraus, dass Sie Genauigkeit nicht zugunsten von Klarheit und betriebsspezifischen Ratschlägen opfern müssen. Nachdem ich es gelesen habe, würde ich mir vorstellen, dass der Autor bereits ein wenig recherchiert und wahrscheinlich das eigentliche gelesen hat Git-Dokumentation, nicht nur die Wiki-Seite von kernel.org. Die Git-orientierte Erklärung des Blog-Autors in einem vollständig kontextualisierten Beispiel scheint für eine große Anzahl von Personen sehr hilfreich zu sein …

    – Matthäus Weber

    9. März 2019 um 14:55 Uhr

  • Übrigens ist der oben erwähnte Chrisjean-Link tot. Der aktualisierte Link ist chrisjean.com/git-submodules-adding-using-removing-and-updating

    – Sprksch

    27. Dezember 2019 um 19:57 Uhr

1646644689 552 Verschachtelte Git Repositories
Igor Zevaka

Platzieren Sie Ihre Bibliotheken von Drittanbietern in einem separaten Repository und verwenden Sie Untermodule, um sie mit dem Hauptprojekt zu verknüpfen. Hier ist eine Anleitung: Git-Tools – Untermodule (Pro Git-Buch, 2.)

Bei der Entscheidung, wie ein Repo segmentiert werden soll, würde ich normalerweise entscheiden, wie oft ich sie ändern würde. Wenn es sich um eine Bibliothek eines Drittanbieters handelt und nur Änderungen, die Sie daran vornehmen, ein Upgrade auf eine neuere Version sind, sollten Sie sie auf jeden Fall vom Hauptprojekt trennen.

  • Vielleicht möchten Sie das ‘s’ zu “https” auf Ihrem Link für eine sichere Verbindung hinzufügen.

    – Nomnom

    21. Dezember 2020 um 20:23 Uhr


  • @Nomnom Fertig. Der Link wurde mit “https” aktualisiert.

    – Tom Nguyen

    19. April 2021 um 16:42 Uhr

1646644689 847 Verschachtelte Git Repositories
Phil

Nur der Vollständigkeit halber:

Es gibt eine andere Lösung, die ich empfehlen würde: Teilbaum zusammenführen.

Im Gegensatz zu Submodulen ist es einfacher zu warten. Sie würden jedes Repository auf die übliche Weise erstellen. Während Sie sich in Ihrem Haupt-Repository befinden, möchten Sie den Master (oder einen anderen Zweig) eines anderen Repositorys in einem Verzeichnis Ihres Hauptverzeichnisses zusammenführen.

$ git remote add -f ThirdPartyGitRepo /project_root/
$ git merge -s ours --no-commit ThirdPartyGitRepo/master
$ git read-tree --prefix=third_party_git_repository_used_by_my_project/ -u ThirdPartyGitRepo/master
$ git commit -m "Merge ThirdPartyGitRepo project as our subdirectory"`

Um dann das andere Repository in Ihr Verzeichnis zu ziehen (um es zu aktualisieren), verwenden Sie die Strategie zum Zusammenführen von Teilbäumen:

$ git pull -s subtree ThirdPartyGitRepo master

Ich benutze diese Methode seit Jahren, es funktioniert 🙂

Mehr über diesen Weg, einschließlich des Vergleichs mit Untermodulen, finden Sie in diesem Git Anleitung doc.

  • Die Unterbaum-Merge-Referenz in das Git-Buch funktioniert nicht mehr. Derzeit scheint dies der Link zu sein: git-scm.com/book/en/v2/…

    – Ericx

    7. November 2016 um 17:25 Uhr

  • Könnte ich bitte fragen, ob Sie die Pfade des OP verwenden könnten, z /project_root/my_project würde mir helfen, meinen Kopf darüber zu wickeln. Meine beiden Projekte werden beide aktiv entwickelt, daher klingt Subtree für mich besser als Submodul.

    – Tomate

    12. September 2021 um 4:32 Uhr

  • Sehr fairer Vorschlag @Tomachi. Getan.

    – Phil

    14. September 2021 um 1:41 Uhr


1646644690 437 Verschachtelte Git Repositories
mikkelbreum

Sie könnten hinzufügen

/project_root/third_party_git_repository_used_by_my_project

zu

/project_root/.gitignore

Dies sollte verhindern, dass das verschachtelte Repo in das übergeordnete Repo aufgenommen wird, und Sie können unabhängig voneinander mit ihnen arbeiten.

Aber: Wenn ein Benutzer git clean -dfx im übergeordneten Repo ausführt, wird das ignorierte verschachtelte Repo entfernt. Eine andere Möglichkeit besteht darin, den Ordner mit einem Symlink zu versehen und den Symlink zu ignorieren. Wenn Sie dann git clean ausführen, wird der Symlink entfernt, aber das „verschachtelte“ Repo bleibt intakt, da es sich wirklich woanders befindet.

git-Unterbaum hilft Ihnen, mit mehreren Projekten in einem einzigen Baum zu arbeiten und trennbare Geschichte für sie behalten.

Zusammenfassung.

Kann ich Git-Repositories verschachteln?

Jawohl. Standardmäßig verfolgt git jedoch nicht die .git Ordner des verschachtelten Repositorys. Git verfügt über Funktionen zur Verwaltung verschachtelter Repositories (lesen Sie weiter).

Ist es sinnvoll, /project_root mit git init/hinzuzufügen, um die Verwaltung von allem lokal zu vereinfachen, oder muss ich my_project und das des Drittanbieters separat verwalten?

Es ist wahrscheinlich nicht sinnvoll, da Git über Funktionen zum Verwalten verschachtelter Repositories verfügt. Die integrierten Funktionen von Git zur Verwaltung verschachtelter Repositories sind submodule und subtree.

Hier ist eine SO-Frage, die die Vor- und Nachteile der Verwendung von jedem abdeckt.

Verschachtelte Git Repositories
Gnud

Ich würde ein Repository pro Projekt verwenden. Auf diese Weise lässt sich die Historie leichter durchsuchen.

Ich würde auch die Version der Bibliothek von Drittanbietern, die ich verwende, in das Repository des Projekts einchecken, das sie verwendet.

964730cookie-checkVerschachtelte Git-Repositories?

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

Privacy policy