Mit PHP, Perl oder Python (vorzugsweise PHP) muss eine SVN-Datenbank abgefragt und die zuletzt an SVN gesendete Versionsnummer ermittelt werden. Ich brauche nichts anderes als das. Es muss nicht intensiv sein (also mache ich es alle 5 Minuten als Cron-Job; die Leistung von SVN sollte nicht beeinträchtigt werden).
SVN befindet sich in meinem Intranet, aber nicht auf meinem speziellen Computer.
Ich habe SVN installiert, aber keine Bindungen für PHP / Perl / Python installiert. Ich verwende Windows XP, würde aber eine plattformunabhängige Lösung bevorzugen, die auch unter Linux funktioniert. Wenn Sie eine Lösung nur für Linux (oder nur für XP) haben, wäre dies ebenfalls hilfreich.
$ svn info --show-item revision
svn: invalid option: --show-item
Verwenden von Apache Subversion 1.8.16 (r1740329) kompiliert 26. April 2016. Auch versucht mit CollabNet 1.6.11 (r934486) kompiliert 6. März 2014.svn help info
die rechtlichen Möglichkeiten fürsvn info
--show-item
ist verfügbarAntworten:
Sie können die Ausgabe in XML wie folgt erhalten:
Wenn ein Fehler auftritt, wird die Ausgabe an stderr geleitet. Um stderr in Ihrer Ausgabe zu erfassen, verwenden Sie Folgendes:
quelle
svn info $url 2>&1
;svn info $url | grep 'Last Changed Rev' | awk '{ print $4; }'
svn info --show-item revision $url
odersvn info --show-item last-changed-revision $url
.Wenn Sie eine lokale Arbeitskopie analysieren möchten, ist das beste Tool
svnversion
, das mit Subversion geliefert wird und eine Ausgabe wie diese erzeugt968:1000M
. Die Dokumentation sagt:quelle
Dadurch erhalten Sie die neueste Versionsnummer am Kopf Ihres Repositorys.
Es gibt einige nette Blog-Beiträge zum Integrieren von Subversion-Nummern in Ihr Build-Skript:
quelle
svn info -r HEAD
Dies sollte in Bash aus einem Arbeitsverzeichnis funktionieren. Ich habe es in Windows mit installierten Unixutils verwendet :
quelle
svn info | grep Revision | cut -d " " -f 2
wird die zweite Zeichenfolge zurückgegeben, nachdem sie mithilfe von Leerzeichen aufgeteilt wurde.Folgendes sollte funktionieren:
Es wird eine einzelne Revisionsnummer zurückgegeben.
quelle
Verwenden Sie Folgendes, um die Nummer der neuesten Revision (" Kopfrevision ") in Ihrem Remote- Respository zu erhalten:
Ausgaben zum Beispiel:
quelle
Ein Hinweis zum Abrufen der neuesten Versionsnummer:
Angenommen, ich habe
cd
in einem überarbeiteten Unterverzeichnis (MyProjectDir
) gearbeitet. Wenn ich dann anrufesvnversion
:... Ich bekomme "
323:340
", was wohl bedeutet: " Sie haben hier Artikel von Revision 323 bis 340 ".Wenn ich dann anrufe
svn info
:... Ich bekomme "
323
" als Revision - das ist eigentlich die niedrigste Revision von denen, die von gemeldet wurdensvnversion
!Wir können dann
svn info
im rekursiven Modus weitere Informationen aus dem lokalen Verzeichnis abrufen:... (entfernen Sie die
grep
, um weitere Details zu sehen).Was tun, wenn wir überprüfen möchten, was die neueste Version des Online- Repositorys ist (in diesem Fall @
server.com
)? Dann geben wir erneut aussvn info
, aber mit-r HEAD
(beachten Sie den Unterschied zwischen-R
früherer Kapitaloption und-r
jetzt Kleinbuchstaben ):Das Interessante ist -
svn info
bezieht sich immer noch auf das aktuelle Unterverzeichnis (MyProjectDir
), der Online-Pfad wird jedoch alsMyProjectDir
(im Gegensatz zum.
lokalen Fall) gemeldet - und die gemeldete Online-Revision ist die höchste (340
- im Gegensatz zur niedrigsten323
gemeldeten) örtlich).quelle
Ab Subversion 1.9 können Sie mit der Option --show-item einen Wert für eines der
svn info
Ausgabefelder des Befehls abrufen . Dieser Befehl zeigt nur die Versionsnummer an:Holen Sie sich die XML-Ausgabe von SVN-Informationen mit der
--xml
Option und verwenden Sie PowerShell, um die Versionsnummer abzurufen . Hier ist ein einfaches Beispiel:Mit VisualSVN Server 3.4 oder neuer können Sie die Anzahl der Revisionen in einem Repository ermitteln, indem Sie die folgenden Befehle ausführen:
$repo = Get-SvnRepository <REPOSITORY-NAME>
$repo.Revisions
Weitere Informationen finden Sie in der
Get-SvnRepository
PowerShell-Cmdlet-Referenz .quelle
Ich denke du suchst
Können Sie diesen Befehl ausführen?
Sie müssen wahrscheinlich auch Anmeldeinformationen für das Repository angeben.
quelle
Jemand anderes hat mich geschlagen, um die Antwort zu veröffentlichen.
svnversion
Dies ist definitiv die beste Lösung, wenn Sie eine Arbeitskopie haben (IIRC, es funktioniert nicht mit URLs). Ich füge Folgendes hinzu: Wenn Sie sich auf dem Server befinden, auf dem SVN gehostet wird, verwenden Sie am besten densvnlook
Befehl. Dies ist der Befehl, den Sie beim Schreiben eines Hook-Skripts zum Überprüfen des Repositorys verwenden (und sogar der aktuellen Transaktion im Fall von Hooks vor dem Festschreiben). Sie könnensvnlook help
für Details eingeben. Sie möchten wahrscheinlich densvnlook youngest
Befehl verwenden. Beachten Sie, dass ein direkter Zugriff auf das Repo-Verzeichnis erforderlich ist, sodass es auf dem Server verwendet werden muss.quelle
Oder
Oder
quelle
Sie können beide Befehle verwenden:
quelle
Wenn Sie wirklich kurz wollen:
Die Caret-Notation ist eine Abkürzung für "die URL des Stammverzeichnisses des Repositorys".
quelle
Wenn Sie das Unglück haben, dies aus einer Windows-Batchdatei heraus tun zu müssen, finden Sie hier die Beschwörung, nach der Sie suchen:
Dies führt "svn info" aus und durchläuft jede Zeile der generierten Ausgabe. Es wird ein Doppelpunkt als Trennzeichen zwischen dem ersten und dem zweiten Token in der Zeile verwendet. Wenn das erste Token "Revision" ist, wird die Umgebungsvariable REV auf das zweite Token gesetzt.
quelle
FOR /F "tokens=2" %%i IN ('svn info ^| FINDSTR Revision:') DO SET revision=%%i
Sie suchen nach einem Anruf, der dem Befehlszeilenaufruf ähnelt
Es scheint, dass dies mit der pysvn-Bibliothek möglich ist, und es gibt ein Rezept , das Ihnen den Einstieg erleichtern soll. Ich bin mir nicht sicher, ob es etwas Ähnliches für PHP gibt.
Wenn Sie die SVN-Binärdatei selbst aufrufen müssen, stellen Sie sicher, dass Sie den
--xml
Parameter verwenden, um das Ergebnis als XML abzurufen. Das sollte einfacher zu analysieren sein als die Befehlszeilenausgabe.quelle
subprocess.check_output
in Python, um einen weiteren Bibliotheksaufruf zu vermeiden. Wenn Sie nur die Versionsnummern überprüfen / die neuesten Kopien abrufen, ist es einfacher, svn über die Befehlszeile über zu verwendensubprocess
. Nun, wenn Sie automatische Check-Ins und Zusammenführungen durchführen ...Sie können das XML-Out-Format verwenden, zum Beispiel:
Beispiel: Verwendung der Versionsnummer
quelle
Sie können den folgenden Befehl ausprobieren:
quelle
Just
svn info
in BASH gibt Ihnen alle DetailsSie erhalten die REVISION daraus
quelle
Der einfachste und sauberste Weg, dies zu tun (tatsächlich SVN 1.9, veröffentlicht 2015), ist:
Die Ausgabe ist die Nummer der letzten (jüngsten) Revision für die SVNURL oder die Nummer der aktuellen Revision der Arbeitskopie von SVNPATH. Das
--no-newline
ist optional und weist an,svn
keine kosmetischen Zeilenumbrüche auszugeben (\n
nach dem Wert ) , wenn Sie nur eine minimale Ausgabe benötigen (nur die ).Siehe: https://subversion.apache.org/docs/release-notes/1.9.html#svn-info-item
quelle
svn info --show-item
anstelle von--show item
Die veröffentlichten Lösungen behandeln den Fall nicht, wenn externe Geräte verwendet werden.
Wenn ich eine URL oder eine Arbeitskopie mit dem
svn:externals
Eigenschaftssatz habe, können sich die externen Elemente ändern, und daher ändert sich die neueste Version des Subversion-Servers. Bei der letzten Überarbeitung der Arbeitskopie oder URL wird die Versionsnummer jedoch nur gemeldet, wenn die Eigenschaft svn: externals geändert wurde oder ein Element im URL-Pfad niedriger ist, was ein erwartetes Verhalten darstellt.Also bekommst du entweder die
svn:externals
Eigenschaft und iterieren über die URLs und wählen die Höhenrevision aus oder fragen die Basis-URL vom Subversion-Server ab. Die von der Basis-URL gemeldete Version enthält die neueste Version für ALLES auf dem Server.Also, wenn Sie Äußerlichkeiten verwenden, ist es am besten zu verwenden ,
svn info BASE_URL
woBASE_URL
die Wurzel - URL für alle Pfade auf dem Subversion - Server.quelle
Dadurch wird nur die Revisionsnummer der zuletzt geänderten Revision angezeigt:
Ich hoffe das hilft.
quelle
$ svn log | head -10
in welchem Verzeichnis auch immer, das einen.svn
Ordner hatquelle
svn info
odersvnversion
nicht berücksichtigen Unterverzeichnisse, um die neueste "Revision" der Live-Codebasis zu finden, hat der unten gehackte Weg für mich funktioniert - es kann eine Weile dauern, bis es ausgeführt wird:quelle
Dies kann mit der "SVN" -Bibliothek erreicht werden:
Die head_revision sollte die neueste Versionsnummer der Datei enthalten
quelle
Es sieht so aus, als ob es dafür einen Eintrag in den offiziellen FAQ gibt . Der Quellcode ist in C, aber es gilt das gleiche Prinzip, wie hier in diesem Mailinglistenbeitrag beschrieben .
quelle
Update: Subversion 1.9 unterstützt einen neuen Befehl "svn jünger", der nur die neueste Versionsnummer ausgibt. Der Unterschied zu "svnlook jüngst" besteht darin, dass "svn jüngster" auch remote funktioniert.
http://subversion.tigris.org/issues/show_bug.cgi?id=4299
quelle