Subversion çalışma kopyası UUID nasıl değiştirilir?


13

Geçenlerde svnadmin dökümü / yükü ile Subversion depolarını eski 1.2.3 sürümünden 1.6.0'a güncelledim . Eski depoların tümü aynı UUID'yi kullandı (depolar, bir şablon havuzu kopyalanarak oluşturuldu). Ben svnadmin setuuid ile yeni depoların birkaç UUID benzersiz olması için değiştirdim. UUID'ler farklı olduğu için bu depoların mevcut çalışma kopyalarımı yeniden konumlandıramıyorum. Çalışma kopyasını dışa aktarmayı ve yeni depodan kontrol etmeyi biliyorum, ancak svnadmin setuuid'in depolar için yaptığı gibi, çalışma kopyasının UUID'sini yerinde değiştirmenin bir yolu olup olmadığını merak ediyordum .

Yanıtlar:


3

Çektiğiniz depodaki tüm 'girişler' dosyalarını düzenlemeniz gerekir. Reponun çok fazla dizini varsa, bulmak + bir sed betiği görevin kısa işini yapar.


17

Subversion 1.7 çalışma kopyası biçiminden beri yeni yanıt . sqlite3Komut satırı yardımcı programına ihtiyacınız var .

Çalışan kopyanızın kök dizininde, artık .svn/SQLite veritabanına sahip tek bir klasör var. UUIDÇalışma kopyanız için bilinen geçerli havuzu şu şekilde sorgulayabilirsiniz :

$ sqlite3 .svn/wc.db 'select uuid from REPOSITORY where id=1'
b6dc3e6c-5320-4549-b231-c153d86d7525

Sonuç olarak, değiştirme UUIDaşağıdakilerle yapılabilir:

$ sqlite3 .svn/wc.db 'update REPOSITORY set uuid="1c0d1ec1-2326-0410-bef5-eb29cddfc032" where id=1'

Elbette, .svn/wc.dbgüncelleme sorgusunu başlatmadan önce dosyanın yedeğini tutun . Havuz varlığınızın farklı bir kimliği olması veya bu tabloda birden fazla satır olması neredeyse hiç mümkün değil, ancak beklenmedik sonuçlar alıp almadığınızı kontrol edebilirsiniz.


+1, UUID'yi değiştiren yeniden konumlandırılmış bir repo ile mükemmel çalıştı
Amro

8

İşte SVN 1.6 ve aşağısı için hile yapan bir komut:

find . -type f -name entries -exec sed -i 's/old-uuid/new-uuid/g' {} \;

Değiştir old-uuidve new-uuidfiili kimlikleri ile.


1
+ 1 Çözüm için teşekkürler. Bu, boşlukları olan dizinler için çalışmaz. "find. -type f -name girişleri -exec sed -i 's / old-uuid / new-uuid / g' {} \;" çift ​​tırnak olmadan çalışıyor gibi görünüyor.
Tommy

sry bu konu necroing için bu yöntem sadece bana bir sürü zaman kazandırdı .. diğerleri bunu denemek için, sadece bir not eklemek istiyorum. MACOX üzerinde Sed biraz farklı bir kullanıma ihtiyaç duyuyor gibi görünüyor, u söylemek gerekir sed -i "" 's/old-uuid/new-uuid/' ve çalışır (sadece ekstra boş çift tırnak) ( ref )
Karthik T

2

Yves Martin'in cevabı, SVN 1.8 ile çalışan bir dizi kopya üzerinde bizim için harika çalıştı, ancak sonuçta işe yaramadığı durumlarla karşılaştık.

Yves'in komutunu "id = 1" olmadan çalıştırmak bizim için her durumda çalıştı:

$ sqlite3 .svn/wc.db 'update REPOSITORY set uuid="1c0d1ec1-2326-0410-bef5-eb29cddfc032"'

Bunun neden olduğunu araştırarak, Yves'in bunun asla gerçekleşmemesi gerektiği sezgisinin aksine, depoyu değiştirirken birden fazla UUID'nin saklandığını öğrendim.

REPOSITORY tablosuna yeni bir giriş, var olanı güncellemek yerine yeni bir konum değiştirdikten sonra yeni depo kökü ve onun UUID'si ile artan bir kimliği depolamak üzere eklenir. Düzgün çalışmayan vakalar, geçmişte zaten taşınmış olan çalışma kopyalarıydı: Komut çalışıyor gibi görünüyordu, ancak şu anda kullanılmakta olan değil, yalnızca ilk UUID değiştirildi.

Bu komutla çalışan bir kopyada saklanan köklerin ve UUID'lerin listesi kontrol edilebilir:

$ sqlite3 .svn/wc.db 'select id,uuid,root from REPOSITORY'

Sonunda, aşağıdaki gibi Windows komut satırı / toplu iş dosyaları için farklı bir tırnak seti kullanmak zorunda olduğumu not edeceğim:

> sqlite3.exe .svn\wc.db "update REPOSITORY set uuid='1c0d1ec1-2326-0410-bef5-eb29cddfc032'"

Çalışan bir kopya taşındığında ayrıntılar için teşekkürler, bu davranışın farkında değildim
Yves Martin

1

Svn kırmızı fasulye kitabındaki " Havuz UUID'lerini Yönetme " bölümü aradığınız cevaba sahip olabilir.


Bu bölüm, kopya UUID'leri değil, depo UUID'lerini anlatıyor.
Ioan

@Ioan: Bu bölümden alıntı: Subversion'un 1.5'ten önceki sürümlerini kullanan kişiler için bu görevler biraz daha karmaşıktır. Svnadmin load --force-uuid REPOS-PATH - Yeni UUID belirtimini taşıyan bir depo dökümü dosya saplamasını borulandırarak bir havuzun UUID'sini açıkça ayarlayabilirsiniz.
yasouser

1
Yine, hayır, depo UUID'lerinden bahsetmiyorum , daha çok kopya UUID'lerden çalışıyorum ; çalışan kopyalar ödeme ile aynıdır.
Ioan

Çalışma kopyasını, repo'nun [yeni / mevcut] konumuna değiştirmeden veya svn'yi değiştirmeden, çalışan kopya UUID'sini sunucu deposununkine değiştiremezsiniz.
yasouser
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.