2009-10-12 4 views
31

Ich habe oft den Fall, dass ich sofort an einem SVN-Repository arbeiten möchte. Aber eine gewöhnliche git svn clone [url] klont auch die gesamte Geschichte. Also möchte ich die Dinge beschleunigen. Der erste Teil besteht darin, nur die letzte Revision in Ihr Git-Repository zu laden. Ich mache es wie so:Git svn Klon: Wie Abruf von Revisionshistorie verzögern

URL=http://google-web-toolkit.googlecode.com/svn/trunk/ 
REV=`svn info $URL |grep Revision: | awk '{print $2}'` 
PROJECT_FOLDER=google-web-toolkit-readonly 

git svn clone -r$REV:HEAD $URL $PROJECT_FOLDER 

(weitere Informationen im Artikel Stackoverflow:.. "How to git-svn clone last n revisions from svn"

Auf diese Weise bin ich zum Laufen und kann sofort arbeiten, aber ohne lokale Kopie der Geschichte

die Frage ist, wie hole ich danach Geschichte aus dem sVN-Repository?

Und vorzugsweise kann dies, in Blöcken von 1000 Revisionen sagen erfolgen (in umgekehrter Reihenfolge). Alle hier Hilfe wäre sehr dankbar :)

+0

Ich fand die folgende Lösung hilfreich http://stackoverflow.com/a/2348596/429476 –

Antwort

21

Ich habe herausgefunden, wie es geht. Der Trick ist nicht zu verwenden git svn clone. Verwenden Sie stattdessen git svn init und git svn fetch einzeln. Verändert das Beispiel:

URL=http://google-web-toolkit.googlecode.com/svn/trunk/ 
REV=`svn info $URL |grep Revision: | awk '{print $2}'` 
PROJECT_FOLDER=google-web-toolkit-readonly 

mkdir $PROJECT_FOLDER 
cd !$ #goes into dir named $PROJECT_FOLDER 
git svn init -s $URL #-s implies --stdlayout with /trunk /tags /branches 
git svn fetch -r $REV 

# hack, hack, hack 

# or update history (fetch 50 revisions back each loop 
for ((r=$REV; r>0; r-=50)); 
do 
    git svn fetch -r $r:HEAD 
done 
+3

dies scheint nicht für mich arbeiten, es gibt nur zurück, wenn ich versuche, git svn fetch -r 1000: Kopf – Verhogen

+0

Das gilt auch für mich und die von Rob Crawford vorgeschlagene Lösung. Die erste Frage bleibt für mich unbeantwortet. – sthiers

+2

@verhogen - 'git svn fetch -r 1000: HEAD bedeutet" alle Revisionen ab Rev 1000 bis zum aktuellen HEAD "holen. Wenn Sie zum Beispiel 800 Revisionen in Ihrem SVN haben, wird dies nichts bringen. Wenn Sie 50k Revisionen hatten, würde es viel mehr holen, als Sie beabsichtigten. –

0

git svn fetch scheint die Revisionen „ erinnern“ es vorher gesehen hat. Ich habe mit dem Tun Bereich Erfolg wurde:

git svn fetch -r 0:100 
git svn fetch -r 100:200 
git svn fetch -r 4500 
git svn rebase 
git svn fetch -r 200:300 

ich die jüngsten Revisionen geholt und dann begann „Füllung in“ die Lücken. Es scheint gut zu funktionieren.

Jesper - Wenn Ihr Repository keine Revision 1000 hat, dann gibt es nichts zu holen. Stellen Sie sicher, dass die von Ihnen verwendeten Revisionsnummern gültig sind!

+1

nicht sicher, was dies bewirkt. Es ist erfolgreich, aber ein Git-Log zeigt Ihnen nichts mehr als Ihr anfängliches Holen und Weiterleiten. –

5

Keine der vorgeschlagenen Antworten wird funktionieren. git svn fetch mit einer Revision ruft nur neuere Revisionen ab als die, die bereits geklont wurden. Sie können möglicherweise git svn reset verwenden, um zu einer älteren Revision zurückzukehren und von dort zu recherchieren, aber Sie müssen anschließend einige schmutzige Arbeit verrichten, um Ihre neueren Revisionen wieder auf den gesamten Baum (den SHA1 einer SVN-Revision in Git hängt von der gesamten Herkunft der Revision ab). Wenn Sie mit den Skalpellen git handlich sind, bietet Ihnen das an.

Es ist viel einfacher, das Problem einfach zu vermeiden.

  • Machen Sie einen ersten Klon der letzten Revisionen, damit Sie sofort arbeiten können;
  • Starten Sie einen weiteren Klon des vollständigen Verlaufs in ein anderes Verzeichnis/Git-Repository;
  • Arbeite in deiner Teilgeschichte so oft du willst;
  • Wenn der vollständige Klon abgeschlossen ist, verwenden Sie einen Ansatz wie http://www.sanityinc.com/articles/relocating-git-svn-repositories/, um Ihre Arbeit vom Teilrepository auf den vollständigen zu kopieren.

Also, das ist eine Teilantwort - wie können Sie danach Geschichte abrufen? Holen Sie es in ein anderes Repo und kopieren Sie, was Sie brauchen. Kann es in 1000er Schritten in umgekehrter Reihenfolge gemacht werden? Mit den Skalpellen, und viel Geduld, könnte, aber es ist es unwahrscheinlich wert.Der volle Abruf, der vorwärts läuft, wird den Overhead all dieser ersten Revisionen, die von jedem Block git svn fetch erfasst werden, überholen, und die Reparatur wird mühsam.