PHP nasıl svn revizyon numarası alabilirim?

12 Cevap php

Ben PHP Uygulama kullandığı revizyon numarası ile etiketlenmiş olmasını istiyorsanız, ancak CruiseControl kullanın veya bir dosyayı güncelleştirmek ve her yüklemek istemiyorum. Ben bunu nasıl yapmalıyım?

12 Cevap

SVN anahtar kelimeler iyi bir çözüm değildir. Diğer bir dosyada $ Revizyon $ ekleyerek işaret ettiği gibi sadece uzun süre değişiklik değil ki, the specific file etkiler.

Her gerçekleştirmeden önce (boş bir satır ekleyerek veya kaldırarak) "edit" Bir dosya için hatırlayarak anlamsızdır. Siz de sadece elle revizyon yazabilirsiniz.

Bunu yapmak için iyi bir yolu (ben biliyorum) (her zaman iyi bir şeydir) bir otomatik dağıtım süreci var ve komut svnversion kullanarak etmektir. İşte ben ne olduğunu:

Ben revizyon gereken yere ben eklerim: <?php include 'version.php'; ?>. Bu "version.php" dosya yalnızca revizyon numarası vardır. Üstelik depo bölümü (bu göz ardı ayarlanır) değildir. İşte ben bunu oluşturmak nasıl olduğunu:

1) SVN sunucu üzerinde yüklü projelerde, ben de dağıtım için kullanabilirsiniz. Ben bir komut dosyası var sunucuya son sürümünü Başlarken diğer şeyler arasında yapar (bu sunucu üzerinde çalışır) aşağıdaki gibidir:

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

2) SVN yüklü değildir projelerde benim dağıtım komut daha karmaşık: bu, lokal version.php dosyası oluşturur kodunu fermuarlar, yüklemeler ve özleri

Bu benzer bir soru http://stackoverflow.com/questions/975083/mark-svn-export-with-revision/2373900#2373900 benim tepki görmek

Siz yapabilirsiniz dışa zaman revizyon numarasını yakalamak ise

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

Revizyon numarası her şeyi ama sıyırmak için, olabildiğince bu sed komutu ile boru

svn export /path/to/repository | grep ^Exported | sed 's/^[^0-9]\+\([0-9]\+\).*/\1/' > revision.txt

Ayrıca, bu gibi yapabilirdik:

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

Bunu yapmak için başka bir olasılık (bir * nix / FreeBSD sunucu olduğunu varsayarak) "Dağıt Süreci" anlatılan adımları yürüten bir cron çalıştırmak.

Performans sorunu varsa, o zaman bunu yapabilirsiniz:

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

Bu tabii ki sizin bir ödeme ve svn komutu varlığını yaptıktan bağlıdır.

Webroot varsayarsak subversion ağacının bir kontrol-out kopyalama, sen / .svn / girişleri dosyayı ayrıştırmak ve revizyon numarasını (burada 4 hat) üzerinden kanca olabilir ...

PHP:

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

Dan this answer:

You can do it by adding the following anywhere in your code

$Id:$

Yani, örneğin Jeff yaptım:

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

and when checked in the server replaced $Id:$ with the current revision number. I also found this reference.

There is also $Date:$, $Rev:$, $Revision:$

This is how I got it to wveyak. If your server is setup to allow shell_exec AND you have SVN installed just run:

$revision = `svnversion`;

veya

$revision = shell_exec('svnversion');

Biraz geç şimdi, ama bir Subversion post-commit kanca kullanın. Lütfen arşivden kanca klasöründe, bu gibi bir kabuk komut dosyası oluşturmak:

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

Bu özel örnekte canlı Alanı / web / root ve geliştirme kodu başka bir yerde tutulması varsayar. Bir dev değişiklik yaptığın zaman, komut öncesinde canlı şablonu (çakışma mesajları önlemek için), güncelleştirmeyi çalışır ve gerçek revizyon numarası ile şablonda REVİZYONU tekrarlarını yerini siler.

Daha kancalar üzerinde here

Çoğu durumda sunucu üzerinde kod aslında bir kod "Export" değil, bir çıkış içerir ve bu nedenle. Svn klasörleri içeren olmaz. En azından ben en sık görmek tuzak. Diğerleri aslında web sunucusu üzerine kendi kodunu kontrol ediyor musunuz?

Kolay yolu yıkıcılık "Kelime Giren" kullanmaktır.

Svnbook bir kılavuz here vardır.

You'll basically just have to add the text $Rev$ somewhere in your file. Then enable the keyword in your repo. On checkout svn will substitute the revision number into the file.

Bu doğru yönde koyar umut

Brian Gianforcaro

Sen SVN Keywords ile yakın alabilirsiniz. Eğer revizyon göstermek istediğiniz yere $ Revizyon $ ekle, ama bu sadece belirli dosya değiştirildi son revizyon gösterecek, böylece dosyaya bir değişiklik her zaman yapmak gerekir. Küresel revizyon numarasını alma dış komut çeşit, ya da post-commit kanca olmadan mümkün değildir.