Bir SVN Deposunu Yansılamak

Hiç bir SVN deposunun birebir yansısını tutmak istediniz mi? Sadece içeriğinin “son” halini değil de, logları ve revizyonları ile tüm tarihçesini.

Örneğin bir uygulama SVN’e entegre olabilmek için depo dosyalarına doğrudan erişebilmek isteyebilir (ör: bir iş takip sistemi) ama ikisi ayrı sunucularda bulunmak zorunda olabilir — bir fiziksel mekan ayrılığı bile söz konusu olabilir.

Ya da basitçe kendinizin sadece okuma erişimi olan bir SVN deposunu yedeklemek isteyebilirsiniz (İnternet’in yedeğini alalım!).

İşte bir SVN deposunun tarihçesi ile beraber bir kopyasını almak ve sonra o kopyayı güncel tutmak için, Subversion paketi ile beraber svnsync isimli caanım bir komut var.

Öncelikle bir dizin oluşturuyoruz:


mkdir /home/kullanici/svn_yansilarim

Daha sonra svnadmin komutu ile yeni, boş bir SVN deposu oluşturuyoruz:


svnadmin create /home/kullanici/svn_yansilarim/depo1

SVN depomuzu revizyonların özelliklerini değiştirebilir biçimde ayarlamalıyız ki, svnsync bir kullanıcı ile bağlanıp svnsync revizyonlardaki değişiklikleri uzaktaki depoya benzetebilsin.

Bunun için /home/kullanici/svn_yansilarim/depo1/hooks/pre-revprop-change adında bir dosya oluşturup, içine aşağıdaki betiği yerleştiriyoruz:


#!/bin/sh
USER="$3"

if [ "$USER" = "svnsync" ]; then exit 0; fi

echo "Only the svnsync user can change revprops" >&2
exit 1

Yansı depomuzun yapısını, svnsync’e vereceğimiz init parametresi ile oluşturuyoruz:


svnsync init --username svnsync file:///home/kullanici/svn_yansilarim/depo1 https://svn.halkacikdepo.com/depo1

svnsync komutuyla artık asıl yansılama işlemine başlayabiliriz. Komut her revizyonu tek tek karşı sunucuya bağlanıp çekeceğinden, bu işlem büyük bir depoda çok yavaş sürecek ve bir sürü disk işlem gerçekleşecek:


svnsync sync file:///home/kullanici/svn_yansilarim/depo1

Bir kez depoyu tamamen yansıladıktan sonra, artık aynı komutla yeni revizyonları kolayca ve hızlıca yerelinize alabilirsiniz.