Domanda

Voglio avere la mia applicazione PHP etichettata con il numero di revisione che utilizza, ma non voglio usare CruiseControl o aggiorna un file e caricalo ogni volta. Come dovrei farlo?

È stato utile?

Soluzione

Le parole chiave SVN non sono una buona soluzione. Come altri hanno sottolineato, l'aggiunta di $ Revision $ in un file ha effetto solo su il file specifico , che potrebbe non cambiare per molto tempo.

Ricordando " modifica " un file (aggiungendo o rimuovendo una riga vuota) prima che ogni commit sia inutile. Puoi anche digitare la revisione a mano.

Un buon modo per farlo (che conosco) è avere un processo di distribuzione automatizzato (che è sempre una buona cosa) e usare il comando svnversion. Ecco cosa faccio:

Ovunque ho bisogno della revisione, includo: <?php include 'version.php'; ?>. Questo & Quot; version.php & Quot; il file ha solo il numero di revisione. Inoltre non fa parte del repository (è impostato per essere ignorato). Ecco come lo creo:

1) Sui progetti in cui SVN è installato sul server, lo uso anche per la distribuzione. Avendo l'ultima versione sul server ho uno script che tra l'altro fa quanto segue (funziona sul server):

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

2) Sui progetti in cui SVN non è installato, il mio script di distribuzione è più complesso: crea il file version.php localmente, comprime il codice, lo carica e lo estrae

Altri suggerimenti

Supponendo che la tua webroot sia una copia estratta dell'albero di sovversione, potresti analizzare il file /.svn/entries e collegare il numero di revisione (4a riga qui) ...

In PHP:

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

Ecco come l'ho fatto funzionare. Se il tuo server è configurato per consentire shell_exec E hai installato SVN basta eseguire:

$revision = `svnversion`;

o

$revision = shell_exec('svnversion');

Da questa risposta :

  

Puoi farlo aggiungendo quanto segue   ovunque nel tuo codice

$Id:$ 
  

Quindi, per esempio, Jeff ha fatto:

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

e se selezionato in   il server ha sostituito $ Id: $ con l'attuale   numero di revisione. Ho anche trovato questo riferimento .

     

C'è anche $ Data: $, $ Rev: $,   $ Revisione: $

Bit in ritardo ora, ma usa un hook post-commit di Subversion. Nella cartella hook del tuo repository, crea uno script shell come questo:

#!/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

Questo esempio particolare presuppone che il tuo sito live sia in / web / root e che il codice di sviluppo sia conservato altrove. Quando si esegue una modifica di sviluppo, lo script elimina il modello live precedente (per evitare messaggi di conflitto), esegue l'aggiornamento e sostituisce le occorrenze di REVISIONE nel modello con il numero di revisione effettivo.

Altre informazioni sugli hook qui

Nella maggior parte dei casi il codice sul server conterrebbe effettivamente un " Export " del codice, non un checkout e quindi non contenere le cartelle .svn. Almeno questa è la configurazione che vedo più spesso. Altri controllano effettivamente il loro codice sul web server?

Puoi avvicinarti con Parole chiave SVN . Aggiungi $ Revision $ dove vuoi mostrare la revisione, ma mostrerà solo l'ultima revisione che quel particolare file è stato modificato, quindi dovresti apportare una modifica al file ogni volta. Ottenere il numero di revisione globale non è possibile senza una sorta di script esterno o un hook post-commit.

Potresti anche farlo in questo modo:

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

Il modo più semplice è utilizzare il Subversion " Sostituzione parole chiave " ;. C'è una guida qui in il libro SVN ( Controllo versione con Subversion ).

Fondamentalmente dovrai solo aggiungere il testo $ Rev $ da qualche parte nel tuo file. Quindi abilita la parola chiave nel tuo repository. Al momento del pagamento SVN sostituirà il numero di revisione nel file.

Vedi la mia risposta alla domanda simile " Mark quot &; svn export con revisione .

Se acquisisci il numero di revisione quando esporti puoi usare:

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

Per eliminare tutto tranne il numero di revisione, è possibile reindirizzarlo tramite questo comando sed:

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');

Un'altra possibilità per farlo è eseguire un cron che esegua i passaggi descritti nel " Distribuisci processo " (supponendo che sia un server * nix / FreeBSD).

Se le prestazioni sono un problema, allora puoi fare:

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

Questo ovviamente dipende dal fatto che tu abbia fatto un checkout e dalla presenza del comando svn.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top