SVN: Ist es möglich, die Liste der Revisionsnummern für gegebenen Pfad zu bekommen?
-
06-07-2019 - |
Frage
Ich mache ein PHP-Tool, das in einem Repository verbindet, lädt die Liste der Commits und speichert sie lokal. Um jedoch die Möglichkeit durch, dass bestimmte Repositories sind riesig und ihre Log-Ergebnisse in langen Wartezeit und mögliche Zeitüberschreitungen / Fehler Grabben, ich möchte jedem Commit herunterladen Nachricht Asynchron-Anfragen verwendet wird.
Also, ich habe ein Start- und Endpunkte in Revisionsgeschichte, und ich kann alle Protokolle wie diese greifen:
svn log -r <from_revision>:<to_revision> <REPO_URL>
... und ich werde möglicherweise mit einer XML-Datei am Ende, die so groß ist, dass es lange Zeit zum Download, lange Zeit und viele Ressourcen nehmen, und langer Zeit zu speichern, zu analysieren.
Wenn ich den Start- und den Endpunkt wissen, kann ich eine erstellen for () Schleife Revisionen greifen eins nach dem anderen:
svn log -r <revision> ...
Aber, da ich nicht weiß, welche spezifischen Revisionen für gegebenen Pfad vorhanden ist, werde ich eine Fehlermeldung. Ich kann den Antrag stellen, dass Fehler bei der Aktualisierung zu ignorieren, aber es ist ein gemeiner Hack und es wird Anfragen stellen und trotzdem für die Antworten warten -., Die überhaupt nicht gut ist
Also, ich brauche etwas wie folgt aus:
- „Gib mir die Liste der Revisionsnummern für diesen Weg“, OR:
- "Gib mir die Liste der Revisionsnummern für diesen Weg, zwischen und
So kann ich in der Lage wäre eine Reihe von gültigen Revisionen für den Repository-Pfad zu machen und sie eins nach dem anderen zu bekommen.
Alle Vorschläge sind willkommen, Dank im Voraus.
Lösung
Ich denke, Ihre beste Wette wäre, die folgende svn log -l 100 0:{$newest} .\
zu tun, dass die ersten 100 Protokolle für ein bestimmtes Verzeichnis oder eine Datei abgerufen werden. dann lesen Sie die letzte Revisionsnummer zurück, dann die nächsten 100 svn log -l 100 {$last_ret_log}:{$newest} .\
anfordern
auf diese Weise erhalten Sie 99 neue Protokolleinträge mit jeder Anforderung, aber man wird nicht alle von ihnen bekommen.
Andere Tipps
Wenn Sie den Zugriff auf den Repository Baum auf dem Subversion-Server haben, dann können Sie svnlook history
verwenden, um eine Liste der Versionsnummern zu erhalten.
Weitere Informationen finden Sie unter http finden .com / de / 1.1 / re49.html .
Ich habe gerade versucht, ein ähnliches Ergebnis zu erhalten. Ich möchte nur alle Revisionsnummern für eine bestimmte Branche.
Ich fand die folgenden recht hilfreich sein.
svn log <svn_server_path> | grep "^r[0-9]\+ | " | cut -d' ' -f1 | cut -c2- > revisions.csv
Das gibt mir eine Datei mit allen Revisionsnummern in separaten Zeilen.
Wir hoffen, Sie oder jemand anderes wird es hilfreich sein.
Unsere Repo hat mehr als 25.000 Revisionen und es dauert ein paar Sekunden, um diese Datei zu erzeugen.
Sie können bei svn list
suchen.
Also für Ihren Zweck:
$ svn list --verbose file:///var/svn/repos
16 sally 28361 Jan 16 23:18 README.txt
27 sally 0 Jan 18 15:27 INSTALL
24 harry Jan 18 11:27 examples/
Hier wird die letzte (Kopf) Revision jeder Datei.
svn log url -l limitNumber - r fromReversion:toReversion
, wenn U wollen die nächstälteren (kleinere) Reversion (Version) finden zum Beispiel
svn log url -l 4 -r someVersion:1
or
svn log url -l 4 -r 99: 3
fromReversion größer als toReversion wenn U will die nächste neuere (größer) Reversion (version)
finden svn log url -l 4 -r someVersion:head
or
svn log url -l 4 -r 3:99
fromReversion lower than toReversion