Ich habe zwei SVN-Projekte aus einem anderen SVN-Repository mit svn: externals .
Wie kann ich in Git dieselbe Repository-Layoutstruktur haben?
Ich habe zwei SVN-Projekte aus einem anderen SVN-Repository mit svn: externals .
Wie kann ich in Git dieselbe Repository-Layoutstruktur haben?
git submodule
Kann jetzt emulierensvn:external
(seit März 2013).Antworten:
Git hat zwei Ansätze, die svn ähneln, aber nicht genau gleichwertig sind: externals:
Beim Zusammenführen von Teilbäumen wird der Code des externen Projekts in ein separates Unterverzeichnis in Ihrem Repo eingefügt. Dies muss detailliert eingerichtet werden und ist dann für andere Benutzer sehr einfach, da es automatisch eingeschlossen wird, wenn das Repository ausgecheckt oder geklont wird. Dies kann eine bequeme Möglichkeit sein, eine Abhängigkeit in Ihr Projekt aufzunehmen.
Es ist einfach, Änderungen aus dem anderen Projekt abzurufen, aber es ist kompliziert, Änderungen zurückzusenden. Und wenn das andere Projekt aus Ihrem Code zusammengeführt werden muss, werden die Projektverläufe zusammengeführt und die beiden Projekte werden effektiv zu einem.
Git-Submodule ( manuell ) verknüpfen einen bestimmten Commit im Repository eines anderen Projekts, ähnlich wie svn: externals mit einem
-r
Argument. Submodule sind einfach einzurichten, aber alle Benutzer müssen die Submodule verwalten, die nicht automatisch in Kassen (oder Klonen) enthalten sind.Obwohl es einfach ist, Änderungen an das andere Projekt zurückzusenden, kann dies zu Problemen führen, wenn sich das Repo geändert hat. Daher ist es im Allgemeinen nicht angebracht, Änderungen an ein Projekt zurückzusenden, das sich in der aktiven Entwicklung befindet.
quelle
svn:externals
. Mit Version 1.5 wurde die Syntax in ein flexibleres Format geändert. Was hinzugefügt wurde, war die relative URL-Adressierung.Wie ich in " Update der neuen Version des Git-Submoduls " erwähne , können Sie mit den Git 1.8.2-Submodulen dieselbe externe SVN-Funktion erreichen:
Dies reicht aus, damit ein Submodul einem Zweig folgt (wie beim LATEST-Commit eines Remote-Zweigs eines Submodul- Upstream-Repos ). Alles was Sie tun müssen ist:
Dadurch wird das Submodul aktualisiert.
Weitere Details finden Sie unter "
git submodule
Neueste Verfolgung ".So konvertieren Sie ein vorhandenes Submodul in ein Submodul, das einen Zweig verfolgt : Alle Schritte finden Sie unter " Git-Submodule: Geben Sie einen Zweig / ein Tag an ".
quelle
svn:externals
?--depth
aber es geht das Problem nicht wirklich an.Ich habe eine alternative Lösung für das Problem - Gil (Git Links) Tool
Es ermöglicht die Beschreibung und Verwaltung komplexer Abhängigkeiten von Git-Repositorys.
Außerdem bietet es eine Lösung für das Abhängigkeitsproblem der rekursiven Git-Submodule .
Angenommen, Sie haben die folgenden Projektabhängigkeiten: Beispiel eines Git-Repository-Abhängigkeitsdiagramms
Anschließend können Sie eine
.gitlinks
Datei mit einer Beschreibung der Repositorys definieren:Jede Zeile beschreibt Git Link im folgenden Format:
Schließlich müssen Sie Ihr Root-Beispiel-Repository aktualisieren:
Als Ergebnis klonen Sie alle erforderlichen Projekte und verknüpfen sie ordnungsgemäß miteinander.
Wenn Sie alle Änderungen in einem Repository mit allen Änderungen in untergeordneten verknüpften Repositorys festschreiben möchten, können Sie dies mit einem einzigen Befehl tun:
Pull, Push-Befehle funktionieren auf ähnliche Weise:
Das Gil-Tool (Git-Links) unterstützt die folgenden Befehle:
Weitere Informationen zum Abhängigkeitsproblem von rekursiven Git-Submodulen .
quelle
gil
.