Problem
Wie erstellt man mit git-svn eine flache Kopie aus einem Subversion-Repository, z. B. wie zieht man nur die letzten drei Revisionen?
Der git clone
Befehl kann die letzten n Revisionen aus einem Git-Repository abrufen, wenn Sie die Option verwenden --depth
, dh Sie erhalten eine flache Kopie des Repositorys. Beispiel:
git clone --depth 3 git://some/repo myshallowcopyrepo
Gibt es eine ähnliche Option für git-svn?
Meine bisherigen Entdeckungen
Bisher habe ich nur die -rN
Option gefunden, wo N
die Revision zu ziehen ist. Beispiel:
git svn clone -rN svn://some/repo
Laut Dokumentation besteht die Möglichkeit zur Verwendung -r$REVNUMBER:HEAD
. Ich habe Folgendes versucht, um die letzten 3 Revisionen zu erhalten, die eine Fehlermeldung zurückgaben.
$ git svn clone --prefix=svn/ -s -rHEAD~3:HEAD http://some/svn/repo .
revision argument: HEAD~3:HEAD not understood by git-svn
Also habe ich durch HEAD~3
die tatsächliche Nummer der vorletzten Revision 534 ersetzt. Das hat funktioniert, aber dafür muss ich zuerst die Revisionsnummer des vorletzten Commits herausfinden.
$ git svn clone --prefix=svn/ -s -r534:HEAD http://some/svn/repo .
Dokumentation
-s is for --stdlayout which presumes the svn recommended layout for tags, trunk, and branches.
(hat aber bei mir nicht funktioniert)--depth
fürgit svn
, da die Unterstützung schon da ist. Und muss es schon die neueste Version vom Server herausfinden?Antworten:
Sie haben bereits den einfachsten Weg gefunden, einen flachen Klon in Git-SVN anzugeben, indem Sie die SVN-Versionsnummer angeben, unter der Sie Ihren Klon starten möchten (
-r$REV:HEAD
).Zum Beispiel:
git svn clone -s -r1450:HEAD some/svn/repo
Die Datenstruktur von Git basiert auf Zeigern in einem gerichteten azyklischen Graphen (DAG), was das Zurückgehen von
n
Commits trivial macht . Aber in SVN (und daher in Git-SVN) müssen Sie die Revisionsnummer selbst finden.quelle
git-svn
Fernbedienung hinzufügen, die auf dieselbe Stelle zeigt, und verwendengit-svn fetch
, um mehr vom Baum zu erhalten. An diesem Punkt müssen Siegit filter-branch
den alten (Teil-) Baum auf den rechten Ast reparieren.n
Commits zurückzulaufen ...Ich benutze häufig das Folgende, um eine begrenzte Anzahl von Revisionen aus unserem riesigen Subversion-Baum herauszuholen (wir erreichen bald die SVN-Revision 35000).
Ein guter Weg, um herauszufinden, wo ein Zweig begonnen hat, besteht darin, einen zu
svn log
machen und den ersten auf dem Zweig zu finden (der letzte, der dabei aufgeführt ist):Bisher habe ich den Aufwand für die Verfolgung aller Branchen nicht wirklich gefunden. Das Klonen dauert zu lange und svn und git arbeiten nicht so gut zusammen, wie ich es gerne hätte. Ich neige dazu, Patch-Dateien zu erstellen und sie auf den Git-Klon eines anderen SVN-Zweigs anzuwenden.
quelle
cherry-pick
/rebase
zwischen diesen. Commit macht einen zusätzlichen Schritt (push
danndcommit
von Remote Repo), aber ich denke, es ist den Kompromiss wert.... 7 Jahre später, in der Wüste, bläst ein Tumbleweed vorbei ...
Ich war mit der akzeptierten Antwort nicht zufrieden und habe einige Skripte erstellt, um dies für Sie zu tun, die auf Github verfügbar sind . Diese sollten jedem helfen, der
git svn clone
das gesamte Repository verwenden möchte, aber nicht das gesamte Repository klonen möchte und nicht nach einer bestimmten Revision suchen möchte, aus der er mitten im Verlauf klonen kann (möglicherweise klonen Sie eine Reihe von Repos). Hier können wir nur die letzten N Revisionen klonen:Verwenden Sie
git svn clone
diese Option, um die letzten 50 Revisionen zu klonenSuchen Sie die vorherige N-Revision aus einem SVN-Repo
quelle