Bir Subversion deposunu nasıl dışa aktarırım (ve sonra içe aktarırım)?


82

Kaynak kodunu depolamak için ticari bir SVN sağlayıcısı kullandığım bir projeye neredeyse sarılıyorum. Müşterinin nihayetinde seçtiği web sunucusu, barındırma paketinin bir parçası olarak bir havuz içerir, bu nedenle, proje bittiğine göre, depoyu web barındırıcısına yeniden yerleştirmek ve ticari hesabı durdurmak istiyorum.

Bunu nasıl yapacağım?

Yanıtlar:


69

Depoyu taşımak ve geçmişi saklamak istiyorsanız, muhtemelen her iki ana bilgisayarda da dosya sistemi erişimine ihtiyacınız olacaktır. Arka ucunuz FSFS ise (son sürümlerde varsayılan) en basit çözüm, tüm depo klasörünün bir dosya sistemi kopyasını oluşturmaktır.

Bir Berkley DB arka ucunuz varsa, arka ucunuzun ne olduğundan emin değilseniz veya SVN sürüm numaralarını değiştiriyorsanız, svnadmin'i eski deponuzu boşaltmak ve yeni deponuza yüklemek için kullanmak isteyeceksiniz. depo. Kullanmak svnadmin dumpsize yeni sisteme kopyalayabileceğiniz tek bir dosya yedeği verecektir. Daha sonra yeni (boş) depoyu oluşturabilir ve svnadmin loadtemelde meta verileriyle (yazar, zaman damgası, vb.) Birlikte tüm taahhütleri yeniden oynatacak olan kullanabilirsiniz .

Döküm / yükleme süreci hakkında daha fazla bilgiyi burada bulabilirsiniz:

http://svnbook.red-bean.com/en/1.8/svn.reposadmin.maint.html#svn.reposadmin.maint.migrate

Ayrıca, bunu yaparsanız svnadmin load, --force-uuidseçeneği kullandığınızdan emin olun , aksi takdirde insanlar yeni depoya geçişte sorun yaşayacaktır. Subversion, depoyu dahili olarak tanımlamak için bir UUID kullanır ve çalışan bir kopyayı farklı bir depoya geçirmenize izin vermez.

Dosya sistemine erişiminiz yoksa, geçiş yapmanıza yardımcı olacak başka üçüncü taraf seçenekleri olabilir (veya bir şeyler yazabilirsiniz): esasen yeni depodaki her bir revizyonu yeniden oynatmak için svn günlüğünü kullanmanız gerekir ve daha sonra meta verileri düzeltin. Bunu yapmak için revprop-change ve revprop-change kanca komut dosyalarına ihtiyacınız olacak, bu da dosya sistemi erişimini varsayıyor, yani YMMV. Veya geçmişi saklamak istemiyorsanız, çalışma kopyanızı yeni depoya aktarmak için kullanabilirsiniz. Ama umarım durum bu değildir.


28
1.7'den beri, artık uzak depolarda yönetici hakları gerektirmeyen svnrdump'ı kullanabilirsiniz. Komut kolaydır: svnrdump dump https//remote/svn/trunk > repos.dump. Çoğu durumda, komut SVN 1.6 ile de çalışır, ancak bazı sorunları olabilir, bkz. Docs. Hem * nix hem de Windows'ta çalışır.
Abel

34

rsvndump svnrepository.com'dan kontrol ettiğim bir Ubuntu sunucusuna bir depoyu taşımak benim için harika çalıştı.

Ubuntu'da rsvndump nasıl kurulur ve kullanılır:

  1. Eksik bağımlılıkları yükleyin ("APR" ve Subversion kitaplıkları)

    sudo apt-get install apache2-threaded-dev
    sudo apt-get install libsvn-dev
    
  2. Rsvndump yükleyin

    wget http://prdownloads.sourceforge.net/rsvndump/rsvndump-0.5.5.tar.gz
    tar xvfz rsvndump-0.5.5.tar.gz
    cd rsvndump-0.5.5
    ./configure
    make
    sudo make install
    
  3. Uzak SVN deposunu yerel bir dosyaya aktarın

    rsvndump http://my.svnrepository.com/svn/old_repo > old_repo_dump
    
  4. Yeni bir depo oluşturun ve yerel döküm dosyasına yükleyin

    sudo svnadmin create /opt/subversion/my_new_rep
    sudo svnadmin load --force-uuid /opt/subversion/my_new_repo < old_repo_dump
    

7
Ardından, mevcut bir çalışma kopyasını svn switch --relocate http://my.svnrepository.com/svn/old_repo http://newserver.com/svn/my_new_repo
taşımak için

Force-uuid seçeneği tam olarak nedir? Dizin izinlerini kaynaktan mı yoksa başka bir şeyden mi kopyalıyor?
Montag451

1
UUID, bir havuzun "evrensel benzersiz tanımlayıcısıdır". UUID'ler eşleşmedikçe yeniden konumlandırılan depoya geçiş yapamazsınız. UUID'yi daha sonra svnadmin setuuid komutuyla ayarlamak da mümkündür.
tkdave


9

Blog- Notumdan kendime alıntı :

Artık, örneğin makineler / alt sürüm sürümleri arasında geçiş yapıyorsanız, bir döküm dosyasını içe aktarabilirsiniz. Örneğin, kaynak depodan bir döküm dosyası oluşturmuşsam ve bunu aşağıda gösterildiği gibi yeni depoya yüklemiş olsaydım.

Unix benzeri sistemler için komutlar (terminalden):

svnadmin dump /path/to/your/old/repo > backup.dump
svnadmin load /path/to/your/new/repo < backup.dump.dmp

Microsoft Windows sistemleri için komutlar (cmd kabuğundan):

svnadmin dump C:\path\to\your\old\repo > backup.dump
svnadmin load C:\path\to\your\old\repo < backup.dump

5

Bunu yapacak araç

svnadmin dump

Ancak bunun çalışması için, depoya dosya sistemi erişimine ihtiyacınız vardır. Ve buna sahip olduğunuzda (ve deponun FSFS formatında olması koşuluyla), depoyu yeni konumuna kopyalayabilirsiniz (BDB formatındaysa, döküm / yükleme şiddetle tavsiye edilir).

Dosya sistemine erişiminiz yoksa, depo sağlayıcınızdan sizin için dökümü sağlamasını istemeniz (ve havuzlarını silmelerini sağlamanız ve uymalarını ummanız gerekir)


5

Depoya dosya erişiminiz yoksa , döküm dosyasını yapmak için rsvndump'ı (uzak Subversion depo dökümü) tercih ederim .


Bunu zor yoldan öğrendim, bugün yeni svn'lerin eski depoların yoz olduğunu düşündükleri ortaya çıktı. Dökümleri kullanmak bunu çözdü.
Baykuş

4

Temel olarak, görevi yerine getirmenin birçok yolu vardır. Konu SVNBook'ta derinlemesine ele alınmaktadır | Depo Verilerini Başka Yerlere Taşımak , bu nedenle kitabın bölümünü okumanızı öneririm.

İşte seçeneklerinizin kısa bir açıklaması:

  • Ortamınıza bağlıdır, ancak depoyu yeni sunucuya kopyalamanız için büyük bir şans vardır ve çalışacaktır. Depoyu kopyaladıktan sonra beklediğiniz gibi çalıştıklarından emin olmak için depo kancası komut dosyalarını gözden geçirmeniz gerekir.

  • Ehm, tam döküm oluşturmak için svnadmin dumpve svnadmin loadkomutlarını kullanabilir ve ardından başka bir sunucudaki başka bir depoya yükleyebilirsiniz. svnadmin createDökümü içine yüklemek için yeni bir temiz depoya ihtiyacınız olacak . Yaklaşımın yalnızca depo geçmişiyle ilgilendiğini ve kanca komut dosyalarını ve depo yapılandırma dosyalarını taşımadığını unutmayın ! Ayrıca, onu dökmek için orijinal depoya okuma dosya sistemi erişiminizin olması gerekir.

  • Subversion 1.7'den beri, svnrdumparaç mevcuttur. Genel olarak konuşursak, taklit eder svnadmin dumpve svnadmin loadişlevseldir, ancak uzaktan çalışır. Araç Subversion istemcisi gibi uzaktan çalıştığı için, örneğin HTTPS protokolü üzerinden, orijinal ve hedef depolara okuma / yazma dosya sistemine erişiminizin olması gerekmez. Bu nedenle, orijinal depoya okuma erişimine sahip olmanız ve hedef olanı okuyup / yazmanız gerekir.

  • Diğer bir seçenek de svnadmin hotcopykomut kullanmaktır . Komut çoğunlukla yedekleme amacıyla kullanılır, yapılandırma ve kanca komut dosyaları dahil olmak üzere deponun tam kopyasını oluşturur. Hotcopied deposu başka bir sunucuya taşıyabilirsiniz.


4

Ayrıca şu svnadmin hotcopykomutu da kullanabilirsiniz :

svnadmin hotcopy OLD_REPOS_PATH NEW_REPOS_PATH

Tüm kancalar, yapılandırma dosyaları vb. Dahil olmak üzere depodan tam bir yedekleme alır.

SVN Book'ta daha fazlası


1
aslında, svnADMIN hotcopy. Bu, bunun da depo dosya sistemi erişimi gerektireceği anlamına gelir!
pilif

3

Svnadmin'i çalıştırmak için gerekli ayrıcalıklara sahip olduğunuzu varsayarsak, dump ve load komutlarını kullanmanız gerekir .


3

Svn depolarının bir barındırma hizmetinden diğerine nasıl taşınacağı ve yerel yedeklemelerin nasıl yapılacağı hakkında bir makale buldum:

  1. Depolarınızı nerede saklayacağınızı tanımlayın:

    mkdir ~/repo
    MYREPO=/home/me/someplace ## you should use full path here
    
  2. Şimdi boş bir svn deposu oluşturun svnadmin create $MYREPO
  3. Bir kanca dosyası oluşturun ve onu çalıştırılabilir hale getirin:

    echo '#!/bin/sh' > $MYREPO/hooks/pre-revprop-change
    chmod +x $MYREPO/hooks/pre-revprop-change
    
  4. Şimdi svnsync, başka bir depodan senkronizasyon için bir hedef depoyu başlatacak olan depoyu içe aktarmaya başlayabiliriz :

    svnsync init file://$MYREPO http://your.svn.repo.here/
    
  5. Ve tüm bekleyen revizyonları, başlatıldığı kaynaktan hedefe aktarmak için son dokunuş:

    svnsync sync file://$MYREPO
    

Artık ~/repodizinde yerel bir svn deponuz var .

Kaynak:


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.