Pergunta

Eu quero ter minha aplicação PHP rotulado com o número de revisão que ele usa, mas eu não quero usar CruiseControl ou atualizar um arquivo e enviá-lo o tempo todo. Como devo fazê-lo?

Foi útil?

Solução

SVN palavras-chave não é uma boa solução. Como outros apontaram acrescentando $ Revision $ em um arquivo só afeta o arquivo específico , que não pode mudar por um longo tempo.

Lembrando a "editar" um arquivo (adicionando ou removendo uma linha em branco) antes de cada commit é inútil. Você pode também apenas digitar a revisão com a mão.

Uma boa maneira de fazer isso (que eu saiba) é ter um processo automatizado de implantação (que é sempre uma coisa boa) e usando a svnversion comando. Aqui está o que eu faço:

Onde quer que eu preciso a revisão eu faço um incluem: <?php include 'version.php'; ?>. Este "version.php" arquivo tem apenas o número de revisão. Além disso, não faz parte do repositório (que definir a ser ignorado). Aqui está como eu criá-lo:

1) Em projetos onde SVN é instalado no servidor, eu também usá-lo para implantação. Obtendo a versão mais recente para o servidor Eu tenho um script que, entre outras coisas faz o seguinte (ele é executado no servidor):

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

2) Em projetos onde SVN não está instalado o meu script de implantação é mais complexa: ele cria o arquivo version.php localmente, fecha o código, uploads e extratos it

Outras dicas

Assumindo que o seu webroot é uma verificado-out cópia da árvore de subversão, você poderia analisar o arquivo /.svn/entries e ligar o número de revisão (4ª linha aqui) ...

Em PHP:

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

Isto é como eu tenho que trabalhar. Se o seu servidor está configurado para permitir shell_exec e você tem SVN instalado basta executar:

$revision = `svnversion`;

ou

$revision = shell_exec('svnversion');

A partir esta resposta :

Você pode fazer isso adicionando a seguinte em qualquer lugar em seu código

$Id:$ 

Assim, por exemplo Jeff fez:

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

e quando verificado na servidor substituída $ Id: $ com a corrente número de revisão. Eu também achei esta referência .

Há também $ Date: $, $ Rev: $, $ Revision: $

Um pouco tarde agora, mas usar um Subversion post-commit gancho. Na pasta ganchos do seu repositório, crie um script shell como este:

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

Este exemplo em particular assume que o seu site ao vivo está em / web / root eo código de desenvolvimento é realizada em outro lugar. Quando você cometer uma mudança dev, o script exclui o modelo vivo antes (para mensagens de evitar o conflito), executa os atualização e substitui ocorrências de revisão no modelo com o número de revisão real.

Mais em ganchos aqui

Na maioria dos casos, o código no servidor que realmente contêm uma "exportação" do código, não um check-out, e, portanto, não contém as pastas .svn. Pelo menos essa é a configuração que eu vejo na maioria das vezes. Será que os outros realmente verificar o seu código no servidor web?

Você pode chegar perto com SVN Palavras-chave . Adicionar $ Revision $ onde deseja que a revisão para mostrar, mas isso só vai mostrar a última revisão que determinado arquivo foi alterado, então você teria que fazer uma mudança para o arquivo de cada vez. Obtendo o número de revisão global não é possível sem algum tipo de script externo, ou um gancho post-commit.

Você também pode fazê-lo como este:

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

A maneira mais fácil é usar o Subversion "Palavra-chave Substituição". Há um guia aqui em o livro SVN ( Controle de Versão com Subversion ).

Você basicamente só tem que adicionar o texto $ Rev $ algum lugar no seu arquivo. Em seguida, habilite a palavra-chave em seu repositório. No check-out SVN irá substituir o número de revisão no arquivo.

Veja a minha resposta à pergunta semelhante "Mark" svn exportação com a revisão .

Se você capturar o número de revisão quando você exporta você pode usar:

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

Para tirar tudo, mas o número de revisão, você pode canalizá-lo através deste 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');

Outra possibilidade de fazer isso é para executar um cron que executa os passos descritos no "Processo Deploy" (supondo que ele é um * nix / servidor FreeBSD).

Se o desempenho for um problema, então você poderia fazer:

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

Isto, obviamente, depende do seu ter feito um check-out, e a presença do comando svn.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top