Andreas St.: Versionsnummer generieren und anzeigen lassen

hallo zusammen,

ich programmiere zur zeit ein online-portal für eine firma (in php, html, css, ne weboberfläche halt). Jetzt bekomme ich öfter mal fehler gemeldet von meinen kollegen. Allerdings rücken sie dann irgendwann damit heraus dass der Fehler schon vor längerer Zeit aufgetreten ist usw...

Jetzt würde ich gerne eine Versionsnummer oder sowas in der art einführen. Habe schön öfter gesehen dass Onlineportale manchmal ganz unten drunter stehen haben "Aktuelle Version: 2x83". Genau so Stelle ich mir das auch vor.

Zum Verwalten meiner Sourcecodes verwende ich SVN. Auf FTP-Server kopiere ich das ganze noch von hand. Kennt/Benutzt von euch jemand etwas um so eine Versionierung zu realisieren? Da gibt es doch ganz bestimmt schon Lösungen.

Würde mich sehr über eine Antwort freuen.

Viele Grüße
andreas

  1. Hallo andreas,

    Zum Verwalten meiner Sourcecodes verwende ich SVN.

    Das reicht Dir doch. SVN bietet mit der Revsisionsnummer ja automatisch eine Zahl, die hochgezählt wird. Und ob im Portal jetzt nun "4.2.1.6.89.2.1314.35.7" steht oder "45789" ist doch im Prinzip vollkommen egal.

    Auf FTP-Server kopiere ich das ganze noch von hand. Kennt/Benutzt von euch jemand etwas um so eine Versionierung zu realisieren?

    SVN bietet sogenanntes "Keyword substitution" an. Damit ersetzt SVN automatisch (wenn aktiviert) $Rev$ durch $Rev: 42 $. Sprich: Du könntest Dir in PHP einfach einen String definieren $str = '$Rev$'; und der wird dann beim Commit / Update automatisch durch $str = '$Rev: 42 $'; ersetzt. Den String könntest Du dann in PHP verarbeiten. Das ganze hat allerdings einen großen Nachteil: $Rev$ steht immer für die letzte Revision, in der diese KONKRETE EINE DATEI modifiziert wurde - d.h. es bringt Dir nur dann etwas, wenn Du die Datei bei jedem Veröffentlichen bearbeiten und dann committen würdest... Wenn das aber der Fall ist, kannst Du die Version ja gleich manuell reinschreiben, bringt Dich also nicht so viel weiter (ich wollt's trotzdem mal erwähnt haben, vielleicht findest Du's ja auch so nützlich).

    Allerdings gibt es ein Programm namens "svnversion". Wenn Du das in einer Working Copy ausführst (d.h. Du bist mit der Kommandozeile in dem Hauptverzeichnis, das Du ausgecheckt hast und rufst dann "svnversion" auf - geht auch genauso unter Windows), dann kannst Du Dir alle Revisionsnummern, die in der Working Copy vorkommen, ausspucken lassen. Die Ausgabe ist dann entweder eine einzige Zahl (42) oder zwei Zahlen, wenn mehrere Revisionen vorkommen (4:42 für Revisionen 4 bis 42).

    Der Witz ist nun, dass Du einfach sagen kannst:

    svnversion > version.txt

    Und dann version.txt einfach mit hochladen, Dein PHP-Script liest die Datei aus, interpretiert den Inhalt und zeigt dann die jeweilige Version an.

    Wenn Du das ganze später mal so erweitern solltest, dass beim Commit Dinge automatisch veröffentlicht werden (das machen wir auf den SELF-Servern übrigens), dann kannst Du den Schritt ja mit integrieren.

    Viele Grüße,
    Christian

    1. hallo Christian,

      Der Witz ist nun, dass Du einfach sagen kannst:

      svnversion > version.txt

      Und dann version.txt einfach mit hochladen, Dein PHP-Script liest die Datei aus, interpretiert den Inhalt und zeigt dann die jeweilige Version an.

      Wenn Du das ganze später mal so erweitern solltest, dass beim Commit Dinge automatisch veröffentlicht werden (das machen wir auf den SELF-Servern übrigens), dann kannst Du den Schritt ja mit integrieren.

      das ganze hört sich doch schon ganz gut an! War mir schon bewusst dass ich da was selber stricken muss...  Wie macht ihr dass es dann gleichzeitig auf den Servern aktiv wird??? Habt ihr da selbst was geschrieben?

      Ich benutze zum ein- und auschecken TortoiseSVN. Damit kann man soviel ich weiß leider keine Sourcen per FTP auf Server verschieben. Nach sowas suche ich auch schon ein weilchen, habe da schon heute schon "Ant" als Tip bekommen. Muss ich am Wochenende mal genauer anschauen.

      Gruß
      Andreas

      1. Moin Moin!

        Ich benutze zum ein- und auschecken TortoiseSVN. Damit kann man soviel ich weiß leider keine Sourcen per FTP auf Server verschieben.

        Ich werde demnächst meinen Mixer reklamieren. Das Mistding kann einfach keinen Kaffee kochen!

        Nach sowas suche ich auch schon ein weilchen, habe da schon heute schon "Ant" als Tip bekommen. Muss ich am Wochenende mal genauer anschauen.

        Ant willst Du Dir nur antun, wenn Du ohnehin auf Java-Schmerzen stehst. Sprachunabhängig kannst Du Dir mal make (am besten in der GNU-Version) ansehen.

        Wenn Du "nur" einen Upload machen willst, hilft auch schon ein kleines Shell-Script bzw. eine Batch-Datei, die ftp mit passenden Kommandos füttert. Etwas luxuriöser ist ein Perl-Script, das z.B. Net::FTP und File::Find kombiniert. Ein automatisiertes "svn export", z.B. in einem cron-Job, hat auch was.

        Alexander

        --
        Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".
      2. Hallo Andreas,

        Wie macht ihr dass es dann gleichzeitig auf den Servern aktiv wird??? Habt ihr da selbst was geschrieben?

        Ja. Bei uns kommt noch dazu, dass unser Repository sowieso auf unseren Servern liegt (und auch per WebDAV zugänglich ist, URI ist https://vms.selfhtml.org/repos/, anonymer Zugang ist per Username = anonymous / Passwort = anonymous möglich, da sieht man allerdings nur die Entwicklungsversion von SELFHTML und nicht die Dateien vom Webangebot) und wir deswegen direkt auf den Servern Zeug ausführen können. Wir haben ein kleines Python-Script, das als Commit-Hook ausgeführt wird. Zusätzlich sind fast alle Dinge, die bei uns über's Web erreichbar sind, einfach nochmal lokale Working Copies die aus dem SVN ausgecheckt wurden und unser Script macht dort einfach ein "svn update" und schon ist das Webangebot aktualisiert (das Script wird - weil's ein Commit-Hook ist - bei jedem Commit aufgerufen). Gut, aus Performancegründen haben wir's inzwischen soweit optimiert, das es nur noch dort aktualisiert, wo sich etwas geändert hat.

        Wenn Du Deine Daten per FTP auf den eigentlichen Server bekommen wolltest, würdest Du das natürlich etwas anders machen. Du würdest bei jedem Commit, der relevante Dateien verändert (auch über einen Commit-Hook), ein svn export in ein temporäres Verzeichnis machen wollen und das dann per FTP hochladen.

        Nach sowas suche ich auch schon ein weilchen, habe da schon heute schon "Ant" als Tip bekommen.

        Wenn Du bisher Ant nicht nutzt, würde ich es auch jetzt nicht. Ein einfaches Script (unter Windows VBScript mit Windows Scripting Host oder Alternativ sowas wie Python, Perl oder Kommandozeilen-PHP, unter Linux/*BSD/Mac OS X/Solaris/... ein Shell-Script oder auch Python oder Perl oder PHP oder sowas) sollte mehr als ausreichen.

        Da Du Dich ja bereits mit PHP auskennst, würde ich Dir vielleicht wirklich empfehlen, ein Kommandozeilen-PHP-Script zu nutzen. Das kannst Du auch unter Windows einfach aus einer Batch-Datei per

        @echo off
        PATH C:\Pfad\zu\PHP;%PATH%
        php C:\pfad\zum\script.php %1 %2

        aufrufen (das %1 und %2 ist dazu da, damit die Parameter, die der Batch-Datei übergeben werden, auch dem PHP-Script wieder übergeben werden, die brauchst Du, um neue Revision zu kennen). Im Script selbst kannst Du dann (Du müsstest zusätzlich zu TortoiseSVN natürlich den Kommandozeilen-SVN-Client unter Windows installieren) das SVN-Kommandozeilentool svnlook aufrufen, z.B. so:

        $geaendert = svnlook changed C:\pfad\zum\repository -r $revision; // $revision = 42 z.B.

        in $geaendert stehen dann verschiedene Zeilen, die alle z.B. folgende Form haben:

        U   selfhtml/trunk/sdml/xml/regeln/xmldeklaration.xml

        (U für aktualisiert, A für hinzugefügt, etc.) Das kannst Du in Deinem PHP-Script verarbeiten und dann nur die geänderten / hinzugekommenen Dateien per FTP hochladen. Zusätzlich kannst Du eine neue "version.txt" in Deinem PHP-Script erstellen und die dann per FTP automatisch hochladen (PHP besitzt ja FTP-Funktionen).

        Ich hoffe, ich konnte Dir so ein bisschen skizzieren, wie das aussehen könnte, Du müsstest halt noch etwas basteln und rumprobieren. Wenn Du zu konkreten Problemen dabei noch Fragen hast, kannst Du sie natürlich gerne im Forum stellen.

        Viele Grüße,
        Christian

        1. Hey Christian,

          super vielen Dank! Das mit dem Commit-Hook ist auf jedenfall der Weg den ich gehen muss.

          Dann kann ich ein kleines Progrämmchen oder auch ne batch-Datei stricken welches mir einfach die version.txt und die geänderten sourcen auf den Server kopiert. Ob ich das in PHP oder VB mache werde ich mal sehen.

          Deine Ansätze waren auf jeden fall sehr hilfreich!!

          Viele Grüße
          Andreas