Gastbeitrag: Mehrere SVNs komfortabel unter Windows aktualisieren

Zu Beginn ein paar Worte zu meiner Person, da ich bis jetzt noch keine Gastbeiträge bei Caschy veröffentlicht habe. Mein Name ist Daniel und ich bin ein lustiger, IT begeisterter, Bremer Blogger und Student der Informatik. Normalerweise finden meine Gedanken und Ideen auf www.Boehrsi.de den Weg in die Freiheit, doch heute bin ich als Gast-Blogger bei Caschy unterwegs, Danke dafür.

svn-multiupdater

Nun zum Thema, es geht darum auf einem einfachen aber auch komfortablen Weg mehrere SVNs einen Update zu unterziehen. Für alle die Subversion bzw. SVN (Apache Subversion – Wikipedia) nicht kennen, es handelt sich um eine serverseitige Versionsverwaltung und bietet die Möglichkeit eure Dateien online zu speichern und auch zu alten Versionen der Dateien ohne Probleme zurückspringen zu können.


Gerade Entwickler die meist aktuelle Versionen von Tools nutzen und testen möchten, greifen öfters auf die SVNs von Open Source Tools zurück, um immer direkt an der Quelle zu sitzen. Weiterhin ist es bei der Arbeit in Projekten mit mehreren Personen gut oder gar notwendig eine Versionsverwaltung zu haben. Um diese nun aktuell zu halten kann unter Windows ein Client mit einer GUI wie z.B. TortoiseSVN genutzt werden, doch damit jedes einzelne SVN zu aktualisieren kann mitunter etwas nervig sein. Konsolen Clients bieten die Möglichkeit mit einem Aufruf direkt mehrere SVNs auf den neusten Stand zu bringen. Aber zumindest bei mir gab es öfters Probleme falls eines der SVNs nicht korrekt arbeitete und auch die Pflege einer Batch Datei mit dem Aufruf zum aktualisieren von 15 SVNs sieht etwas unübersichtlich aus.

Aus diesem Grund habe ich ein kleines Batch Script erstellt welches die folgenden Funktionen bietet:

  • Einfaches Update von mehreren SVNs aber über einzelne SVN Befehle um Fehler besser zuordnen zu können
  • Eintragung eines SVNs erfolgt in einer Textdatei in der pro Zeile ein SVN steht, somit bleibt die Übersicht erhalten
  • Aktionen des Scripts werden in einer Log Datei gespeichert, somit kann für jedes SVN separat eingesehen werden ob das Update erfolgreich war
  • Einstellungen welche Informationen in die Log gelangen sollen
  • Durch das erstellen einer Verknüpfung und das anschließende ablegen selbiger im Autostart sind alle SVNs direkt zum Systemstart auf dem neusten Stand

Voraussetzungen:

  • Ein SVN Client der den Befehl „svn update“ unterstützt, z.B. SlikSVN
  • SVNs die einem Update unterzogen werden sollen

Das Script ist als Batch Datei zum Download verfügbar und kann entsprechend der eigenen Bedürfnisse angepasst werden. Es ist unter der CC BY-SA 3.0 verfügbar und alle weiteren Informationen können der im Download enthaltenen ReadMe Datei entnommen werden.

Abschließend sei noch gesagt, dass dieses Script leicht angepasst werden kann um automatisch in mehreren SVNs commits durchzuführen, für diesen Vorgang würden dann allerdings Geplante Aufgaben genutzt werden, um z.B. vor dem herunterfahren alle Änderungen automatisch zu sichern.

Gefällt dir der Artikel? Dann teile ihn mit deinen Freunden.

Hallo, ich bin Carsten! Baujahr 1977, Dortmunder im Norden, BVB-Getaufter und Gründer dieses Blogs. Auch zu finden bei Twitter, Google+, Facebook, Instagram und YouTube. PayPal-Kaffeespende. Mail: carsten@caschys.blog

24 Kommentare

  1. Wieso updatest du so viele Repositories auf einmal? Irgendwas musst du mit den neuen Sourcecodes ja auch machen und man kann in der Regel nicht an zig Projekten gleichzeitig arbeiten. Zudem bieten die meisten IDEs doch auch die Funktion, x Repositories auf einmal zu aktualisieren.

    Wenn du aber eine Lösung parat hast, die SVN „nativ“ LDAP-Gruppen beibringt, dann bin ich ganz aus dem Häuschen 🙂

  2. Ich nutze beruflich SVN auch in Kombination mit Tortoise. Meine Projekte liegen alle in einem Unterverzeichnis (z.B. D:\Projekte). Wenn ich dort alle Unterverzeichnisse auswähle und im Tortoise Kontextmenü „Update“ auswähle, werden auch alle Repositories aktualisiert.

    Aber eigentlich muss ich P4G0 recht geben: ein ziemlich untypischer Fall, alle auf einmal zu aktualisieren.

  3. Mike Lowrey says:

    Naja so abwegig ist das auch nicht… Wenn man nen Tool benutzt was viel auf fremdem Code basiert und man jeweils die aktuelle Version nutzt bietet es sich doch gerade zu an den zugehörigen Code in einem Rutsch zu aktualisieren.

  4. Also ich denke auch, dass das eher untypisch ist.
    Ich kann mir auch nicht vorstellen, dass die Konfliktbehandlung so vernünftig ablaufen kann. Man muss ja scheinbar immer erst in die log-Datei schauen um zu erkennen, wo es hackt.
    Ich finde es aber klasse, dass du das Skript unter CC frei zur Verfügung stellst, da es immer jemanden geben wird, der es gebrauchen kann. Also: *Daumen hoch*

  5. Danke für das nette Script 🙂 Kannst du noch den SVN log für jede WC seit dem letzten Update in die Log schreiben?

  6. Hi,
    zu dem wo dieser Fall Auftritt im weiteren und vorne weg ich bestreite nicht, dass der Fall etwas besonders ist oder ich etwas faul bin ;).

    Ich habe alle meine Uni Fächer via SVNs auf meinen Server gepackt und arbeite dort zusammen mit jeweils verschiedenen Personen an den Aufgaben. Häufig eine Aufgabe pro Woche in 5-6 Fächern und dementsprechend diverse Änderungen. Da ist es mir schon oft passiert, dass ich ein Update vergessen habe und bereits getätigte Änderungen übersah, vor allem weil der geneigte Student ja gerne in der Nacht arbeitet :).

    Zusätzlich habe ich einige Repos von Tools, die ich mir nur bei Bedarf mal kompiliere und dementsprechend will ich, ohne darauf achten zu müssen, alles aktuell haben.

    Ein dritter und besonderer aber vielleicht für den einen oder anderen hilfreicher Fall ist folgender:
    1. Kalender soll via Thunderbird genutzt werden
    2. Weiterhin soll der Kalender via Rainlendar auf dem Desktop angezeigt werden, in der Free Version.
    3. Das soll an X Rechnern funktionieren

    Nun zum Problem, die kostenlose Version von Rainlendar mag soweit ich weiß keine Netzwerk / Online Kalender ala Google Kalender.

    Und somit kommt das Script, in etwas erweiterter Form, zum Einsatz. Denn die ICS Datei liegt im SVN, bei jedem Start führt das Script ein Update durch, sodass der Kalender aktuell ist. Weiterhin wird der „Zusatz“ genutzt und beim herunterfahren oder abmelden wird alles was geändert wurde via commit online gestellt. Dieser Fall macht nur Sinn wenn eine Person dies haben will und nicht gleichzeitig an 2 Rechnern sitzt, das ist klar aber vielleicht möchte der eine oder andere dies ja für seine privaten Einträge.

    @P4G0 Bezüglich der nativen Verknüpfung mit LDAP habe ich leider auch nichts parat, wäre bei mir auf der Arbeit sicherlich auch gerne gesehen ^^.

    @Son Das man immer erst in die Log schauen muss ist sicherlich nicht das beste, werde wohl noch eine automatische Info für den Fehlerfall einbauen. Und CC muss sein :), denn dadurch das es spezieller ist haben vermutlich viele Leute er vom Code als vom „eigentlichen Programm“ etwas.

    Grundsätzlich sicherlich nicht für jeden hilfreich aber vielleicht für den einen oder anderen und sorry für diesen „etwas langen Kommentar“ ;).

  7. Auweise, da habe ich vorhin doch glatt meinen Nickname zum Kommentieren genutzt, mache ich sonst nie 🙂

    Wieso hast du für jedes Fach ein einzelnes Repo (so klingt das für mich), schonmal was von Ordnern gehört? 😉

    Ich bin übrigens drauf und dran, eine LDAP-Anindung für SVN zu schreiben. LDAP-Benutzer kann man natürlich ganz easy über den Apache Webserver + mod_dav_svn nutzen, aber Gruppen kann man damit leider nicht nutzen (außer über kranke Apache-Configs).

  8. Hm bei mir ging das immer mit svn update * im übergeordneten Ordner der ganzen Repositories, geht das bei euch nicht?

  9. It’s too late to be a pessimist – retten wir unsere Welt, unseren Lebensraum !

    Ideen, Lösungen und kreative Aktionen – helfen wir uns gemeinsam und ihr, unserer Erde – http://www.youtube.com/user/jusufhome

  10. @Patrick Über eine sinnige Ordner Struktur lässt sich das sicherlich auch lösen. Und dann würde auch das von foxylion erwähnte „svn update *“ sehr gut gehen :).
    Habe das ganze bei mir aber nach Semestern sortiert, mit diversen nicht SVN Dateien, hatte mir das mal so angewöhnt. 😉

  11. Im übrigen: Automatische Commits sind eine blöde Idee! (^_^)
    Man sollte schon dokumentieren, was sich geändert hat, was so natürlich nicht funktioniert.

  12. Und bei sowas wie einem Kalender würde ich lieber rsync nutzen und das ganze auf nen FTP oder SSH-Server synchronisieren, entfernt auch den ganzen unnötigen Overhead den svn produziert. Wer braucht schon 100 alte Versionen des Kalenders? 😉

  13. @André Gerne und kannst du mir noch mal etwas genauer schreiben wie und was du möchtest, bin gerade etwas verpeilt ;).

    @Son Sowas geht natürlich nur wenn in bestimmten Fällen, z.B. beim Kalender Bsp. allgemein sind commits ohne Comment natürlich böse ;).

    @foxylion Alternativen und auch bessere Alternativen gibts sicherlich aber naja der Mensch ist ja ein Gewohnheitstier und das gute SVN lag da herum ;).

  14. Also ich versteh auch nicht so wirklich den Sinn hinter dieser Geschichte. Wenn ich in einem anderen Repository weiter arbeite mache ich aus Routine ein Update bevor ich anfange. Ich wüsste nicht warum ich immer alle auf einmal updaten sollte, zumal ich vielleicht an der ein oder anderen Stelle noch etwas zu commiten habe. Als Entwickler finde ich so eine Batch-Datei eigentlich sogar eher gefährlich als nützlich. Sorry…

    hm… nochmal gelesen.. also für einfache datei-repositorys ohne source code dahinter ist sowas natürlich doch nützlich. allerdigns gibt es da doch echt besseres als svn dazu zu missbrauchen dateien zu archivieren. dropbox, rsync etc. naja, hat wohl alles seinen sinn^^

  15. Naja, wenn man über Tools Dateien öffnet und nicht über den Ordner kann es finde ich schon mal vorkommen, dass man vergisst das die Datei in einem Repo liegt.
    Und naja bezüglich dem gefährlich, ganz unrecht hast du nicht aber naja für jegliche Automatisierung gilt bekanntlich Vorsicht.
    Aber wie gesagt gibt sicherlich Alternativen die für konkrete Zwecke sinnvoller sind 😉 aber dem einen oder anderen bringt es vielleicht was.

  16. Im zweifelsfall kann man sowas bei eigenem SVN server auch mit Bordmitteln hacken indem man ein Metarepository anlegt, das die anderen an der richtigen stelle als externe repos einbinden, alles auf einmal updaten funktioniert dann, committen nicht – das wiederum fände ich auch bedenklich, weil man dann allzuschnell mal was committed was man evtl. gar nicht committen wollte.

  17. I think this station is very good! Can recommend here! http://duan.ca/84874a

  18. Also ich selbst arbeite auch mit vielen Projekten. Nutze selbst aber nur die Kommandozeilen Version von CVS, SVN und GIT.
    Die GUIs sind nicht schlecht aber kommen nicht an eine Batch ran. Geht schneller, schneller zu ändern usw.

  19. Ein Student mit der Rechtschreibung? Armes Deutschland.

  20. @Arno Nym Also ich finde die Apokalypse bricht wegen dem Text noch nicht los und auch Deutschland hat noch eine Chance aber hey ich bin ja auch nicht objektiv. 😉

  21. @Boehrsi

    ich meine den Log was bei den jeweiligen Commits geändert wurde. Du ermittelst vor und nach dem Updaten die Revision (svn info) und holst die Logeinträge (svn log) für die neuen Revisionen und schreibst sie in die Log.

    Ich möchte halt immer wissen was geändert wurde. So müsste ich bei den Projekten wo es Updates gab noch selber manuell nachschauen. Wenn das in der Log drin ist sieht man es schneller.

    Danke!

    Gruß
    André

  22. Hast du noch an mich gedacht?

    Die Syntax ist das hier:

    svn log -r 14:15

    Die alte Revision war in dem Beispiel 13 und sind 14 und 15 neu dazugekommen und die Log hole ich damit.

    Man muss halt vor und nach dem Update die Revision holen (svnversion ist noch schneller und besser als svn info)

  23. @André Werde das heute oder morgen einbauen, wenn alles passt. Und hatte dich nicht vergessen, war bloß eine Woche im Urlaub (ohne Internet ^^) und hatte ganz vergessen das hier kurz zu schreiben.