Jak Mogę uzyskać numer wersji Subversion w PHP?

Chcę, aby moja aplikacja PHP była oznaczona numerem wersji, której używa, ale nie chcę używać CruiseControl ani aktualizować pliku i przesyłać go za każdym razem. Jak mam to zrobić?

Author: Peter Mortensen, 2008-09-21

13 answers

Słowa kluczowe SVN nie jest dobrym rozwiązaniem. Jak zauważyli inni, dodanie $Revision$ do pliku wpływa tylko na konkretny plik , który może się nie zmieniać przez długi czas.

Pamiętanie o "edycji" pliku (poprzez dodanie lub usunięcie pustej linii) przed każdym zatwierdzeniem jest bezcelowe. Równie dobrze możesz wpisać wersję ręcznie.

Jednym z dobrych sposobów, aby to zrobić (o którym wiem) jest posiadanie zautomatyzowanego procesu wdrażania (co jest zawsze dobrą rzeczą) i użycie polecenia svnversion. Proszę. is what I do:

Wszędzie tam, gdzie potrzebuję rewizji, dołączam: <?php include 'version.php'; ?>. Ta wersja.php " plik ma tylko numer wersji. Co więcej, nie jest częścią repozytorium (ma być ignorowane). Oto jak go tworzę:

1) w projektach, w których SVN jest zainstalowany na serwerze, używam go również do wdrażania. Pobierając najnowszą wersję na serwer mam skrypt, który między innymi wykonuje następujące czynności (działa na serwerze):

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

2) na projektach, w których SVN nie jest zainstalowany mój skrypt wdrażania jest bardziej złożony: tworzy wersję.plik php lokalnie, zamyka kod, wgrywa i rozpakowuje

 53
Author: daremon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-22 16:44:40

Zakładając, że Twój webroot jest sprawdzoną kopią drzewa subversion, możesz przeanalizować /.plik svn / entries i zaczepić numer rewizji (4 linia tutaj)...

W PHP:

$svn = File('.svn/entries');
$svnrev = $svn[3];
unset($svn);
 17
Author: Oli,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-21 17:20:56

Tak to działa. Jeśli twój serwer jest skonfigurowany tak, aby zezwalać shell_exec i masz zainstalowany SVN po prostu uruchom:

$revision = `svnversion`;

Lub

$revision = shell_exec('svnversion');
 8
Author: Nathan J. Brauer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-03 15:58:12

From this answer :

Możesz to zrobić, dodając następujące anywhere in your code

$Id:$ 

Więc na przykład Jeff zrobił:

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

I po sprawdzeniu w serwer zamienił $Id:$ na bieżący numer rewizji. Znalazłem również to odniesienie .

Istnieje również $Date:$, $Rev:$, $Revision:$

 4
Author: Espo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:13:34

Trochę za późno, ale użyj Hooka po zatwierdzeniu Subversion. W folderze Hooki w repozytorium Utwórz skrypt powłoki taki jak ten:

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

Ten konkretny przykład zakłada, że Twoja witryna jest w /web / root, a kod programistyczny jest przechowywany gdzie indziej. Po zatwierdzeniu zmiany dewelopera skrypt usuwa poprzedni aktywny szablon( aby uniknąć komunikatów o konfliktach), uruchamia aktualizację i zastępuje wystąpienia rewizji w szablonie rzeczywistym numerem rewizji.

Więcej o haczykach tutaj

 3
Author: Mark,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-28 09:25:20

W większości przypadków kod na serwerze rzeczywiście zawiera "eksport" kodu, a nie checkout, a zatem nie zawiera .foldery svn. Przynajmniej taką konfigurację widzę najczęściej. Czy inni faktycznie sprawdzają swój kod na serwerze WWW?

 2
Author: Kibbee,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-21 17:23:37

Możesz zbliżyć się za pomocą svn Keywords . Dodaj $Revision$ tam, gdzie chcesz, aby rewizja była wyświetlana, ale to pokaże tylko ostatnią wersję, w której dany plik został zmieniony, więc będziesz musiał dokonać zmiany w pliku za każdym razem. Uzyskanie globalnego numeru rewizji nie jest możliwe bez jakiegoś zewnętrznego skryptu lub Hooka po zatwierdzeniu.

 2
Author: noah,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-21 17:27:54

Najprostszym sposobem jest użycie Subversion "Zamiana słów kluczowych". Jest tu Przewodnik w książce SVN (Kontrola wersji z Subversion).

Będziesz musiał po prostu dodać tekst $Rev$ gdzieś w swoim pliku. Następnie włącz słowo kluczowe w repozytorium. Przy kasie SVN zastąpi numer wersji w pliku.

 2
Author: Brian Gianforcaro,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-12 13:44:03

Zobacz moją odpowiedź na podobne pytanie "Zaznacz" eksport svn z rewizją.

Jeśli zarejestrujesz numer wersji podczas eksportu, możesz użyć:

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

Aby usunąć wszystko oprócz numeru wersji, możesz to zrobić za pomocą komendy sed:

svn export /path/to/repository | grep ^Exported | sed 's/^[^0-9]\+\([0-9]\+\).*/\1/' > revision.txt
 2
Author: fijiaaron,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-12 13:45:51

Można też zrobić to tak:

$status = @shell_exec('svnversion '.realpath(__FILE__));
if ( preg_match('/\d+/', $status, $match) ) {
    echo 'Revision: '.$match[0];
}
 1
Author: Christoffer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-27 14:47:40
$svn_rev=file_get_contents('/path.to.repository/db/current');
 1
Author: Inpassor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-29 07:41:15

Inną możliwością jest uruchomienie crona, który wykonuje kroki opisane w "procesie wdrażania" (zakładając, że jest to serwer *nix/FreeBSD).

 0
Author: Andrei Iarus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-27 14:32:01

Jeśli wydajność jest problemem, możesz to zrobić:

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

To oczywiście zależy od tego, czy dokonałeś zakupu i obecności komendy svn.

 0
Author: Jonathon Hill,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-28 16:18:20