beban subversi gagal dengan “no revisi semacam itu”

18

Saya mencoba mempelajari cara memigrasi repo Subversion, dan saya mengalami masalah yang tidak masuk akal bagi saya. Saya sudah terbiasa svndumpfiltermembagi sub-proyek, dan telah menghapus beberapa awalan jalur. Beberapa ratus komit sekarang mengimpor dengan benar, tetapi kemudian saya mendapatkan kesalahan berikut:

<<< 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 ...

OK, jadi saya masuk ke file dump untuk melihat revisi 19190 dan 19098. Pertama-tama, revisi 19098 memang ada di file dump dan diimpor tanpa masalah. Revisi 19190 adalah gabungan. Dalam 19190, inilah info file terakhir itu, yang tampaknya menyebabkan masalah:

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

Yang membingungkan, revisi 19100 TIDAK ada dalam file yang difilter ini. Tetapi kesalahannya tidak mengacu pada 19100, itu merujuk pada 19098!

Apa yang harus saya lakukan agar file ini dimuat?

Terima kasih!

Harlan
sumber
Jika sesuatu yang rumit ("dump and filter" diikuti oleh "import") gagal, coba sesuatu yang lebih sederhana dulu ("dump", lalu "import"). Saya hanya pernah memigrasikan repo keseluruhan, dan itu menjadi mudah.
Dirk Eddelbuettel
Terima kasih, Dirk. Kami benar-benar harus membagi repo ini.
Harlan
Mungkin melakukan "Dump, Impor. Mengurangi tangan, Dump lagi. Impor Dump ke-2." ?
Dirk Eddelbuettel
Kecuali saya melewatkan sesuatu, saya tidak berpikir SVN bekerja seperti itu. Anda harus mengurangi menggunakan file dump dan svndumpfilter. Dan kami ingin menyimpan sejarah, sebanyak mungkin.
Harlan
3
Mengapa tidak bermigrasi ke git atau lincah, dan singkirkan warisan SVN dalam langkah yang sama?
vonbrand

Jawaban:

1

Saya telah melakukan pemisahan seperti ini berkali-kali. Saya pikir itu semua tergantung pada bagaimana Anda menggunakan filter dan pengolahan apa yang Anda lakukan pada file dump sesudahnya. Secara pribadi, saya juga harus mengubah pengguna svn, di samping jalur proyek, dan revisi nomor baru. Supaya Anda bisa melihat apa yang bisa dilakukan, inilah bagian yang relevan dari skrip saya.

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

Apa yang terjadi di sana adalah yang pertama, saya menyaring apa yang saya butuhkan, saya drop revisi kosong untuk alasan yang jelas dan saya beri nomor baru pada mereka. Ini memberikan revisi pesanan yang bagus. Kemudian saya drop jalan akar proyek yang dalam kasus saya adalah dalam bentuk grup / pelanggan karena dalam repo baru yang tidak masuk akal (sebaliknya repo itu sendiri adalah grup / pelanggan pada disk) - ini adalah 2 sed pertama

Setelah itu, saya menghapus impor direktori tanpa nama, yang dihasilkan dari 2 sed di atas untuk dir grup dan kemudian satu untuk menambahkan dir grup / pelanggan.

akhirnya, saya merayu penulis untuk mengubahnya ke yang baru. Yang ini agak rumit juga karena perlu memperbarui panjang definisi properti.

Kemudian saya memuatnya dan memperbaiki izin sistem file. Perhatikan 2 chown yang dikomentari untuk apache, dalam beberapa kasus Anda akan membutuhkannya. Saya akhirnya menambahkan apache ke grup svn.

Sekarang, saya tidak pernah memiliki penggabungan dalam repo SVN saya jadi saya tidak pernah harus berurusan dengan mereka untuk pemecahan itu. Dalam kasus Anda, saya akan membayangkan bahwa apa yang terjadi adalah jalur revisi sumber tidak diimpor dan itulah mengapa ia tidak menemukannya meskipun kesalahannya mengeluh pada revisi itu sendiri). Aturan praktis dalam file impor svn adalah bahwa apa pun yang disebut pada satu titik harus sudah diimpor sebelum dirujuk. Jadi Anda mungkin telah memfilter sesuatu yang seharusnya tidak Anda inginkan, meskipun Anda menginginkannya, atau tidak memperbarui file dump dengan benar untuk mencerminkan perubahan apa pun yang telah Anda buat.

Jika Anda memberikan struktur yang relevan dari repo asli Anda, termasuk jalur sumber yang digabungkan, ditambah panggilan Anda dengan parameter, saya mungkin dapat memberi tahu Anda apa yang Anda lewatkan. Uang saya ada di sumber penggabungan.

secara sopan
sumber
1

Saya telah menggunakan alat hebat svndumpsanitizer . Masalahnya adalah bahwa struktur repositori subversi terlalu rumit. Ketika svndumpfilter berada di revisi 10, ia tidak memiliki cara untuk mengetahui apakah sebuah simpul yang ingin dibuang oleh pengguna, akan dipindahkan ke posisi yang ingin ia pertahankan dalam revisi 113. Jadi ia melakukan satu-satunya hal yang dapat ia lakukan - ia membuang simpul tersebut , dan pada revisi 113 craps keluar karena sudah membuang data ternyata diperlukan.

Svndumpsanitizer bekerja dengan cara yang berbeda. Itu memindai node beberapa kali untuk menemukan node mana yang harus disimpan. Setelah itu ditentukan node mana yang akan tetap menulis hanya node ini ke file outfile. Akhirnya - jika perlu - itu menambahkan komit yang menghapus node yang tidak diinginkan yang harus disimpan agar tidak merusak repositori.

ALex_hha
sumber