330 Stimmen

Wie klont man mit git-svn die letzten n Revisionen aus einem Subversion-Repository?

Problem

Wie erstellt man mit git-svn eine oberflächliche Kopie eines Subversion-Repositorys, z.B. wie zieht man nur die letzten drei Revisionen?

Les git clone Befehl kann die letzten n Revisionen aus einem Git-Repository abrufen, wenn Sie die Option --depth , d.h. Sie erhalten eine oberflächliche Kopie des Repositorys. Beispiel:

git clone --depth 3 git://some/repo myshallowcopyrepo

Gibt es eine ähnliche Option für git-svn?

Meine bisherigen Entdeckungen

Bislang habe ich nur die -rN Option, bei der N ist die zu ziehende Revision. Beispiel:

git svn clone -rN svn://some/repo

Gemäß der Dokumentation besteht die Möglichkeit, die -r$REVNUMBER:HEAD . Ich habe Folgendes versucht, um die letzten 3 Revisionen zu erhalten, was eine Fehlermeldung ergab.

$ git svn clone --prefix=svn/ -s -rHEAD~3:HEAD http://some/svn/repo .
revision argument: HEAD~3:HEAD not understood by git-svn

Ich ersetzte also HEAD~3 mit der tatsächlichen Nummer der drittletzten Revision 534. Das hat funktioniert, aber dazu muss ich erst die Revisionsnummer der drittletzten Übergabe herausfinden.

$ git svn clone --prefix=svn/ -s -r534:HEAD http://some/svn/repo .

Dokumentation

git-clone

git-svn

258voto

Paul Punkte 16115

Sie haben bereits die einfachste Möglichkeit entdeckt, einen flachen Klon in Git-SVN zu erstellen, indem Sie die SVN-Revisionsnummer angeben, mit der Sie Ihren Klon beginnen wollen ( -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 es trivial macht, zurück zu gehen n bindet. In SVN (und damit in Git-SVN) müssen Sie die Revisionsnummer jedoch selbst ermitteln.

97voto

Christian Punkte 9358

Ich verwende das Folgende oft, um eine begrenzte Anzahl von Revisionen aus unserem riesigen Subversion-Baum herauszuholen (wir erreichen bald svn-Revision 35000).

# checkout a specific revision
git svn clone -r N svn://some/repo/branch/some-branch
# enter it and get all commits since revision 'N'
cd some-branch
git svn rebase

Ein guter Weg, um herauszufinden, wo eine Verzweigung begann, ist eine svn log und suchen Sie die erste Verzweigung (die letzte in der Liste):

svn log --stop-on-copy svn://some/repo/branch/some-branch

Bisher fand ich es nicht wirklich lohnenswert, alle Zweigstellen zu verfolgen. Das Klonen nimmt zu viel Zeit in Anspruch und svn und git arbeiten nicht so gut zusammen, wie ich es mir wünschen würde. Ich neige dazu, Patch-Dateien zu erstellen und sie auf den Git-Klon eines anderen svn-Zweigs anzuwenden.

45voto

jonathan.cone Punkte 6523

... 7 Jahre später, in der Wüste, weht ein Steppenläufer vorbei ...

Da ich mit der akzeptierten Antwort nicht zufrieden war, habe ich einige Skripte erstellt, die dies für Sie erledigen verfügbar auf Github . Diese sollten jedem helfen, der die git svn clone aber nicht das gesamte Repository klonen möchte und nicht nach einer bestimmten Revision in der Mitte der Historie suchen möchte (vielleicht klonen Sie eine Reihe von Repos). Hier können wir einfach die letzten N Revisionen klonen:

Verwenden Sie git svn clone um die letzten 50 Revisionen zu klonen

# -u    The SVN URL to clone
# -l    The limit of revisions
# -o    The output directory

./git-svn-cloneback.sh -u https://server/project/trunk -l 50 -o myproj --authors-file=svn-authors.txt

Die vorherige N-Revision aus einem SVN-Repository finden

# -u    The SVN URL to clone
# -l    The limit of revisions

./svn-lookback.sh -u https://server/project/trunk -l 5

CodeJaeger.com

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.

Powered by:

X