Frage

Ich möchte meine PHP-Anwendung mit der Versionsnummer markiert haben, die sie verwendet, aber ich will nicht CruiseControl- oder eine Datei aktualisieren und es jedes Mal laden. Wie soll ich es tun?

War es hilfreich?

Lösung

SVN Keywords ist keine gute Lösung. Wie andere wies darauf hin, $ Revision $ in einer Datei hinzufügen wirkt sich nur auf die spezifische Datei , die für eine lange Zeit kann nicht geändert werden.

In Erinnerung an „Bearbeiten“ eine Datei (durch Hinzufügen oder Entfernen einer Leerzeile) vor jedem Commit ist sinnlos. Sie könnten auch nur die Revision von Hand eingeben.

Eine gute Möglichkeit, es zu tun (die ich kenne) ist einen automatisierten Deployment-Prozess zu haben (was immer eine gute Sache ist) und mit dem Befehl svnversion. Hier ist, was ich tun:

Wo auch immer ich brauche die Revision ich ein gehören: <?php include 'version.php'; ?>. Diese „version.php“ Datei hat nur die Revisionsnummer. Darüber hinaus sie nicht Teil des Repository ist (so dass er ignoriert werden). Hier ist, wie ich es schaffen:

1) Bei Projekten, bei denen SVN auf dem Server installiert ist, habe ich es auch für die Bereitstellung verwenden. Immer die neueste Version auf dem Server habe ich ein Skript, das unter anderem führt die folgenden (es läuft auf dem Server):

cd /var/www/project
svn update
rm version.php
svnversion > version.php

2) Bei Projekten, bei denen SVN ist nicht meine Deployment-Skript installiert ist komplexer: es die version.php Datei lokal erzeugt, Reißverschluss den Code, Up- und extrahiert sie

Andere Tipps

Angenommen, Ihre Webroot ist eine abgemeldeten Kopie der Subversion Baumes, könnten Sie die /.svn/entries Datei analysieren und die Revisionsnummer (4. Zeile hier) Haken aus ...

In PHP:

$svn = File('.svn/entries');
$svnrev = $svn[3];
unset($svn);

Das ist, wie ich es zu arbeiten. Wenn Ihr Server-Setup shell_exec zu ermöglichen und haben Sie SVN installiert nur ausführen:

$revision = `svnversion`;

oder

$revision = shell_exec('svnversion');

diese Antwort :

  

Sie können es tun, indem Sie die folgende Zugabe   überall im Code

$Id:$ 
  

So zum Beispiel Jeff tat:

<div id="svnrevision">svn revision: $Id:$</div>
  

und wenn in dem geprüft   Server ersetzt $ Id: $ mit dem aktuellen   Revisionsnummer. Ich fand auch dieser Referenz .

     

Es gibt auch Datum: $ $, $ Rev: $,   $ Revision: $

Bit spät, aber verwenden Sie eine Subversion Haken post-commit. In Ihrem Haken Ordner des Repository, erstellen Sie ein Shell-Skript wie diese:

#!/bin/bash

REPOS="$1"
REV="$2"

cd /web/root
rm -f /web/root/templates/base.html
/usr/bin/svn update
/bin/sed -i s/REVISION/$REV/ /web/root/templates/base.html

Dieses spezielle Beispiel geht davon aus Ihrer Live-Website ist in / web / root und die Entwicklung Code wird an anderer Stelle statt. Wenn Sie einen Entwickler Änderung zu übernehmen, löscht das Skript die vor Live-Vorlage (Konfliktmeldungen zu vermeiden), läuft das Update und ersetzt Vorkommen von REVISION in der Vorlage mit der aktuellen Versionsnummer.

Mehr zu Haken hier

In den meisten Fällen wird der Code auf dem Server enthalten würde tatsächlich ein „Export“ des Codes, kein Kasse, und daher nicht mit den .svn Ordner enthalten. Zumindest ist das das Setup ich am häufigsten zu sehen. Sie andere tatsächlich ihren Code auf dem Webserver an!

Sie können ganz nah mit SVN Keywords . In $ Revision $, wo Sie die Revision zeigen wollen, aber das wird nur die letzte Revision, die bestimmte Datei geändert wurde, so dass Sie eine Änderung an die Datei jedes Mal machen müßte. die globale Revisionsnummer zu erhalten ist, ohne irgendeine Art von externer Skript nicht möglich ist, oder ein post-commit Haken.

Sie können auch tun es wie folgt aus:

$status = @shell_exec('svnversion '.realpath(__FILE__));
if ( preg_match('/\d+/', $status, $match) ) {
    echo 'Revision: '.$match[0];
}

Der einfachste Weg ist es, die Subversion „Keyword Substitution“ zu verwenden. Es ist ein Leitfaden hier in das SVN Buch ( Versionskontrolle mit Subversion ).

Sie werden im Grunde müssen nur den Text $ Rev $ irgendwo in der Datei hinzufügen. Aktivieren Sie dann das Schlüsselwort in Ihrem Repository. Beim Auschecken SVN wird die Revisionsnummer in die Datei ersetzen.

Sehen Sie meine Antwort auf die ähnliche Frage "Mark" svn export mit Revision .

Wenn Sie die Revisionsnummer erfassen, wenn Sie exportieren können Sie:

svn export /path/to/repository | grep ^Exported > revision.txt

Um alles, aber die Revisionsnummer Streifen reicht, können sie durch diese sed Befehl:

svn export /path/to/repository | grep ^Exported | sed 's/^[^0-9]\+\([0-9]\+\).*/\1/' > revision.txt
$svn_rev=file_get_contents('/path.to.repository/db/current');

Eine weitere Möglichkeit, dies zu tun, ist es, einen cron auszuführen, die die Schritte in dem „Bereitstellen Process“ beschrieben ausführt (vorausgesetzt, es ist ein * Nichts / FreeBSD-Server).

Wenn die Leistung ein Problem ist, dann könnten Sie tun:

exec('svn info /path/to/repository', $output);
$svn_ver = (int) trim(substr($output[4], strpos($output[4], ':')));

Das hängt natürlich von Ihrer eine Kasse getan zu haben, und die Anwesenheit des SVN-Befehls.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top