Ich habe zwei SVN-Projekte in Verwendung von einem anderen SVN-Repository mit svn:externals .
Wie kann ich die gleiche Repository-Layout-Struktur in Git haben?
Ich habe zwei SVN-Projekte in Verwendung von einem anderen SVN-Repository mit svn:externals .
Wie kann ich die gleiche Repository-Layout-Struktur in Git haben?
Git hat zwei Ansätze, die svn:externals ähnlich, aber nicht genau gleich sind:
Zusammenführung von Teilbäumen Fügen Sie den Code des externen Projekts in ein separates Unterverzeichnis innerhalb Ihres Repos ein. Dies hat eine detailliertes Verfahren zur Einrichtung und dann ist es für andere Benutzer sehr einfach, da es automatisch einbezogen wird, wenn das Repository ausgecheckt oder geklont wird. Dies kann ein bequemer Weg sein, um eine Abhängigkeit in Ihr Projekt einzubinden.
Es ist einfach, Änderungen aus dem anderen Projekt zu übernehmen, aber es ist kompliziert, Änderungen zurückzuschicken. Und wenn das andere Projekt Ihren Code zusammenführen muss, werden die Projektverläufe zusammengeführt und die beiden Projekte werden effektiv eins.
Git-Untermodule ( Handbuch ) auf einen bestimmten Commit im Repository eines anderen Projekts verweisen, ähnlich wie svn:externals mit einem -r
Argument. Untermodule sind einfach einzurichten, aber alle Benutzer müssen die Untermodule verwalten, die nicht automatisch in Checkouts (oder Klonen) enthalten sind.
Es ist zwar einfach, Änderungen an das andere Projekt zurückzusenden, aber das kann zu Problemen führen, wenn sich das Projektarchiv geändert hat. Daher ist es im Allgemeinen nicht sinnvoll, Änderungen an ein Projekt zurückzusenden, an dem gerade gearbeitet wird.
Wie ich in " Git-Submodul neue Version aktualisieren ", können Sie Folgendes erreichen die gleiche externe SVN-Funktion mit Git 1.8.2 Untermodulen:
git config -f .gitmodules submodule.<path>.branch <branch>
Dies reicht aus, damit ein Untermodul einem Zweig folgt (wie bei der LATEST-Übertragung eines entfernten Zweigs eines Untermoduls Upstream-Repositorium ). Alles, was Sie tun müssen, ist a:
git submodule update --remote
Dadurch wird das Submodul aktualisiert.
Weitere Einzelheiten finden Sie in " git submodule
Verfolgung der neuesten ".
So wandeln Sie ein bestehendes Submodul in ein Submodul um, das einen Zweig verfolgt : siehe alle Schritte in " Git-Untermodule: Einen Zweig/Tag angeben ".
Ich bin der Autor von gil (git links) Werkzeug
Ich habe eine alternative Lösung für dieses Problem - gil (git links) Werkzeug
Es ermöglicht die Beschreibung und Verwaltung komplexer Abhängigkeiten von Git-Repositories.
Außerdem bietet es eine Lösung für das Git rekursives Submodul-Abhängigkeitsproblem .
Nehmen wir an, Sie haben die folgenden Projektabhängigkeiten: Beispiel eines Git-Repository-Abhängigkeitsgraphen
Dann können Sie definieren .gitlinks
Datei mit der Beschreibung der Repositories-Beziehung:
# Projects
CppBenchmark CppBenchmark https://github.com/chronoxor/CppBenchmark.git master
CppCommon CppCommon https://github.com/chronoxor/CppCommon.git master
CppLogging CppLogging https://github.com/chronoxor/CppLogging.git master
# Modules
Catch2 modules/Catch2 https://github.com/catchorg/Catch2.git master
cpp-optparse modules/cpp-optparse https://github.com/weisslj/cpp-optparse.git master
fmt modules/fmt https://github.com/fmtlib/fmt.git master
HdrHistogram modules/HdrHistogram https://github.com/HdrHistogram/HdrHistogram_c.git master
zlib modules/zlib https://github.com/madler/zlib.git master
# Scripts
build scripts/build https://github.com/chronoxor/CppBuildScripts.git master
cmake scripts/cmake https://github.com/chronoxor/CppCMakeScripts.git master
Jede Zeile beschreibt den Git-Link im folgenden Format:
Schließlich müssen Sie Ihr Root-Beispiel-Repository aktualisieren:
# Clone and link all git links dependencies from .gitlinks file
gil clone
gil link
# The same result with a single command
gil update
Als Ergebnis klonen Sie alle erforderlichen Projekte und verknüpfen sie auf geeignete Weise miteinander.
Wenn Sie alle Änderungen in einem Repository mit allen Änderungen in den untergeordneten verknüpften Repositories verbinden wollen, können Sie dies mit einem einzigen Befehl tun:
gil commit -a -m "Some big update"
Pull- und Push-Befehle funktionieren auf ähnliche Weise:
gil pull
gil push
Das Werkzeug Gil (git links) unterstützt die folgenden Befehle:
usage: gil command arguments
Supported commands:
help - show this help
context - command will show the current git link context of the current directory
clone - clone all repositories that are missed in the current context
link - link all repositories that are missed in the current context
update - clone and link in a single operation
pull - pull all repositories in the current directory
push - push all repositories in the current directory
commit - commit all repositories in the current directory
Mehr über Git rekursives Submodul-Abhängigkeitsproblem .
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.