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ć?
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
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);
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');
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:$
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
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?
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.
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.
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
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];
}
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');
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).
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.
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