subversiyon yükü “böyle bir revizyon yok” ile başarısız oluyor


18

Bir Subversion deposunu nasıl taşıyacağımı öğrenmeye çalışıyorum ve benim için anlamlı olmayan bir sorunla karşılaşıyorum. Kullandığım svndumpfilterbir alt proje bölmek ve bazı yol önekleri kaldırdık. Birkaç yüz taahhüt şimdi doğru bir şekilde içe aktarılıyor, ancak sonra aşağıdaki hatayı alıyorum:

<<< Started new transaction, based on original revision 19190
     * editing path : branches/features/DynamicSource ... done.
     * editing path : branches/features/DynamicSource/src/build.properties ... done.
     * editing path : branches/features/DynamicSource/src/client/default.htm ...done.
     * editing path : branches/features/DynamicSource/src/client/js/AdHocController.js ... done.
     * editing path : branches/features/DynamicSource/src/client/js/Report.js ... done.
svnadmin: E160006: No such revision 19098
     * adding path : branches/features/DynamicSource/src/client/js/Enums.js ...

Tamam ben revizyonlar 19190 bakmak için dökümü dosyasına gidin ve tüm 19098. Öncelikle revizyon 19098 yapar dökümü dosyasında bulunur ve bir sorun olmadan ithal edildi. 19190 revizyonu bir birleşmedir. 19190 içinde, soruna neden olduğu anlaşılan son dosya bilgileri:

Node-copyfrom-rev: 19100
Node-copyfrom-path: trunk/src/client/js/Enums.js
Text-copy-source-md5: 2db7f8d9c0ba4750d88ce0722731aad6
Node-path: branches/features/DynamicSource/src/client/js/Enums.js
Node-action: add
Text-copy-source-sha1: 8f930509f8dbc17c5e82cd40aa5a76454d3d812c
Node-kind: file
Content-length: 0

Kafa karıştırıcı bir şekilde, bu filtrelenmiş dosyada 19100 revizyonu YOKTUR. Ancak hata 19100'e atıfta bulunmuyor, 19098'e atıfta bulunuyor!

Bu dosyanın yüklenmesini sağlamak için ne yapmalıyım?

Teşekkürler!


Karmaşık bir şey ("döküm ve filtre" ve ardından "içe aktarma") başarısız olursa, önce daha basit bir şey deneyin ("döküm", ardından "içe aktar"). Ben sadece bütün bir repo göç ettim, ve bu kolay-bezelye gitti.
Dirk Eddelbuettel

Teşekkürler Dirk. Yine de bu repoyu gerçekten bölmeliyiz.
Harlan

Belki "Boşalt, İçe Aktar. Elle azalt, Tekrar Boşalt. 2. Dökümü İçe Aktar." ?
Dirk Eddelbuettel

Bir şey kaçırmadıkça SVN'nin bu şekilde çalıştığını sanmıyorum. Döküm dosyasını ve svndumpfilter kullanarak azaltmanız gerekir. Ve tarihi mümkün olduğunca korumak istiyoruz.
Harlan

3
Neden git veya mercurial'a göç etmiyor ve aynı adımda eski SVN'den kurtulmuyorsunuz?
vonbrand

Yanıtlar:


1

Bu tür bölünmeyi birçok kez yaptım. Her şeyin filtreyi nasıl kullandığınıza ve daha sonra döküm dosyasında ne yaptığınıza bağlı olduğunu düşünüyorum. Şahsen, svn kullanıcısını, proje yolunun yanında değiştirmek ve revizyonları yeniden numaralandırmak zorunda kaldım. Neler yapılabileceğini görebilmeniz için senaryomun ilgili kısmı.

grp=$cust_group
usr=$cust_customer
svndumpfilter include $grp/$usr --drop-empty-revs --renumber-revs  <$repo_dump > $repo_dump.$usr
sed -e "s/Node-path: $grp\/$usr/Node-path: /" <$repo_dump.$usr >$repo_dump.$usr.fixed1
sed -e "s/Node-copyfrom-path: $grp\/$usr/Node-copyfrom-path: /" <$repo_dump.$usr.fixed1 >$repo_dump.$usr.fixed2
sed -e "/Node-path: /{ N; N; N; N; N; N; s/Node-path: \nNode-action: add\nNode-kind: dir\nProp-content-length: 10\nContent-length: 10\n\nPROPS-END//}" <$repo_dump.$usr.fixed2 >$repo_dump.$usr.fixed3
sed -e "/svn:author/{ N; N; s/svn:author\n.*\n$svn_usr_from/svn:author\nV $svn_usr_len\n$svn_usr_to/}" <$repo_dump.$usr.fixed3 >$repo_dump.$usr.fixed4
svnadmin load $repo_dir/$cust_group/$cust_customer --ignore-uuid < $repo_dump.$usr.fixed4

chown svn:svn -R $repo_dir/$cust_group/$cust_customer
#chown apache $repo_dir/$cust_group/$cust_customer/db/txn-current
#chown apache $repo_dir/$cust_group/$cust_customer/db/current
# apache is in svn group so the above 2 are not needed
chmod -R g+rw $repo_dir/$cust_group/$cust_customer

Orada olan şey, önce ihtiyacım olanı filtreliyorum, açık nedenlerle boş revizyonları bırakıyorum ve onları yeniden numaralandırıyorum. Bu güzel düzenli revizyonlar verir. Sonra benim durumumda grup / müşteri şeklinde olan projenin kök yolunu bırakıyorum çünkü hiçbir anlamı olmayan yeni repoda (bunun yerine repo'nun kendisi diskteki grup / müşteri) - bu ilk 2 sed's

Ardından, biri grup dir için yukarıdaki 2 seds ve sonra grup / müşteri dir ekleme için bir adlandırılmış dizinleri alma kaldırmak.

nihayet yazarı yenisiyle değiştirmek için baştan çıkarıyorum. Bu özellik tanımı uzunluğunun güncellenmesi gerektiği gibi biraz zor oldu.

Sonra yüklerim ve dosya sistemi izinlerini düzeltirim. Apache için yorum yapılan 2 chowna dikkat edin, bazı durumlarda buna ihtiyacınız olacaktır. Sonunda svn grubuna apache ekledim.

Şimdi, SVN depolarımda hiç birleşme olmadı, bu yüzden ayrılmak için onlarla uğraşmak zorunda kalmadım. Sizin durumunuzda, kaynak revizyon yolunun alınmadığını ve hatanın revizyonun kendisinden şikayet etmesine rağmen bunu bulamadığını hayal ediyorum). Svn içe aktarma dosyasındaki temel kural, bir noktada atıfta bulunulan her şeyin, gönderilmeden önce zaten içe aktarılmış olması gerektiğidir. Bu nedenle, istemenize rağmen yapmamanız gereken bir şeyi filtrelemiş olabilir veya döküm dosyasını yaptığınız diğer değişiklikleri yansıtacak şekilde doğru şekilde güncellememiş olabilirsiniz.

Birleştirilmiş kaynak yolunun dahil orijinal repo, artı parametrelerle aramalarınızın alakalı yapıyı sağlamak, ben olabilir ne cevapsız tel sizi muktedir. Param birleşmenin kaynağında.


1

Ben harika bir araç svndumpsanitizer kullandık . Sorun, yıkım veri havuzu yapısının çok karmaşık olmasıdır. Svndumpfilter revizyon 10'da olduğunda, kullanıcının atmak isteyeceği bir düğümün revizyon 113'te tutmak istediği bir konuma taşınacağını bilmenin bir yolu yoktur. Bu yüzden yapabileceği tek şeyi yapar - düğümü atar 113 numaralı revizyonda, veriyi zaten attığı için ihtiyaç duyduğu ortaya çıktı.

Svndumpsanitizer farklı bir şekilde çalışır. Hangi düğümlerin gerçekten tutulması gerektiğini keşfetmek için düğümleri birkaç kez tarar. Hangi düğümlerin tutulacağını belirledikten sonra, yalnızca bu düğümleri dış dosyaya yazar. Son olarak - gerekirse - depoyu kırmamak için saklanması gereken istenmeyen düğümleri silen bir taahhüt ekler.

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.