Question

Je souhaite que mon application PHP soit étiquetée avec le numéro de révision utilisé, mais je ne souhaite pas utiliser CruiseControl ou mettez à jour un fichier et envoyez-le à chaque fois. Comment dois-je le faire?

Était-ce utile?

La solution

Les mots-clés SVN ne sont pas une bonne solution. Comme d'autres l'ont souligné, l'ajout de $ Revision $ dans un fichier affecte uniquement le fichier spécifique , qui peut ne pas changer pendant longtemps.

Se souvenir de " éditer " un fichier (en ajoutant ou en supprimant une ligne vide) avant chaque commit est inutile. Vous pouvez aussi simplement taper la révision à la main.

Un bon moyen de le faire (à ma connaissance) est d’avoir un processus de déploiement automatisé (ce qui est toujours une bonne chose) et d’utiliser la commande svnversion. Voici ce que je fais:

Partout où j'ai besoin de la révision, je fais une inclusion: <?php include 'version.php'; ?>. Cette & Quot; version.php & Quot; Le fichier n'a que le numéro de révision. De plus, il ne fait pas partie du référentiel (il doit être ignoré). Voici comment je le crée:

1) Sur les projets où SVN est installé sur le serveur, je l’utilise également pour le déploiement. Obtenir la dernière version sur le serveur, j’ai un script qui effectue entre autres choses (il s’exécute sur le serveur):

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

2) Sur les projets où SVN n'est pas installé, mon script de déploiement est plus complexe: il crée le fichier version.php localement, compresse le code, le télécharge et l'extrait

Autres conseils

En supposant que votre racine Web soit une copie extraite de l’arbre de sous-version, vous pouvez analyser le fichier /.svn/entries et décrocher le numéro de révision (4ème ligne ici) ...

En PHP:

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

Voici comment je l’ai fait fonctionner. Si votre serveur est configuré pour autoriser shell_exec ET si vous avez installé SVN, exécutez simplement:

$revision = `svnversion`;

ou

$revision = shell_exec('svnversion');

De cette réponse :

  

Vous pouvez le faire en ajoutant ce qui suit   n'importe où dans votre code

$Id:$ 
  

Ainsi, par exemple, Jeff a-t-il:

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

et lorsque coché dans le   le serveur a remplacé $ Id: $ par le courant   numéro de révision. J'ai également trouvé cette référence .

     

Il y a aussi $ Date: $, $ Rev: $,   $ Révision: $

Un peu tard, mais utilisez un point d'ancrage post-commit de Subversion. Dans le dossier des crochets de votre référentiel, créez un script shell semblable à celui-ci:

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

Cet exemple particulier suppose que votre site actif est dans / web / root et que le code de développement est conservé ailleurs. Lorsque vous validez un changement de développeur, le script supprime le modèle actif précédent (pour éviter les messages de conflit), exécute la mise à jour et remplace les occurrences de REVISION dans le modèle par le numéro de révision actuel.

Pour en savoir plus sur les points d'ancrage ici

Dans la plupart des cas, le code sur le serveur contiendrait en fait un " Export " du code, pas une extraction, et donc ne contiennent pas les dossiers .svn. Au moins c'est la configuration que je vois le plus souvent. Est-ce que d'autres personnes vérifient leur code sur le serveur Web?

Vous pouvez vous rapprocher de Mots-clés SVN . Ajoutez $ Revision $ à l'endroit où vous souhaitez afficher la révision, mais cela n'indique que la dernière révision de ce fichier particulier, de sorte que vous devez le modifier à chaque fois. Obtenir le numéro de révision global n’est pas possible sans un script externe ou un hook post-commit.

Vous pouvez également le faire comme ceci:

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

Le moyen le plus simple consiste à utiliser Subversion & "Substitution de mots clés &". Il existe un guide ici dans le livre SVN ( Contrôle de version avec Subversion ).

Il vous suffira d'ajouter le texte $ Rev $ quelque part dans votre fichier. Activez ensuite le mot clé dans votre référentiel. À la caisse, SVN substituera le numéro de révision dans le fichier.

Voir ma réponse à la question similaire " Mark & Quot; svn export avec révision .

Si vous capturez le numéro de révision lors de l'exportation, vous pouvez utiliser:

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

Pour tout effacer sauf le numéro de révision, vous pouvez le diriger à travers cette commande 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');

Une autre possibilité consiste à exécuter un cron qui exécute les étapes décrites dans la section & "Déployer le processus &"; (en supposant que ce soit un serveur * nix / FreeBSD).

Si les performances sont un problème, vous pouvez faire:

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

Cela dépend bien sûr de votre vérification et de la présence de la commande svn.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top