SVN'de XXX çalışma kopyası kilitli ve temizleme başarısız oldu


582

Bir yaptığım zaman bu hatayı alıyorum svn update:

Çalışma kopyası XXXXXXXX kilitli Lütfen "Temizleme" komutunu uygulayın

Temizleme çalıştırdığımda,

Temizleme aşağıdaki yolları işleyemedi: XXXXXXXX

Bu döngüden nasıl çıkarım?


5
Bu mesajı da aldım. Verilen cevaplar biraz sıkıcı görünüyordu (özellikle en yüksek oyu alan). Ben sadece VS kapatıldı ve çözüm yeniden ve ben her şeyi gayet iyi kontrol edebildi.
oscilatingcretin

Firefox'un SQLLite Manager'ı kullanarak WORK_QUEUE tablosundaki girişleri silmek için eakkas yorumunu takiben sorun benim için düzeltildi.
zeplin

12
Basit bir cevap var, sadece seçeneği, "kilitleri kırmak" kontrol ve bu çalışma kopyasını temizleyecek
Farhan

Yanıtlar:


517

Bir yaklaşım:

  1. Düzenlenen öğeleri başka bir konuma kopyalayın.
  2. Sorun yolunu içeren klasörü silin.
  3. Subversion üzerinden içeren klasörü güncelleyin.
  4. Dosyalarınızı geri kopyalayın veya değişiklikleri gerektiği gibi birleştirin.
  5. işlemek

Başka bir seçenek, üst düzey klasörü silmek ve tekrar kontrol etmek olacaktır. Umarım buna rağmen gelmez.


123
Sadece OP'nin sorununu (ve benim) düzeltmek için değil, aynı zamanda herhangi bir svn sorununu gideren 5 adımı vermek için bu geçici çözüm için + 1'leyin. -1 bu tür geçici çözümler için alt sürüm.
pxl

34
Bu teknik olarak çalışıyor olsa da, bunu yapmak bir kötü oyu hak ettiği kilitleri kaldırmaya kıyasla çok kötü bir yoldur.
Jukka Dahlbom

8
3. adımı yapamam çünkü ... "Çalışma kopyası zaten kilitli"
Evgeny

20
BradS'in tavsiyelerini göz önünde bulundurun "Benim için hile, sorun oluşmadan önce çalıştığım klasörde değil, çalışma kopyamın üstünde 'svn cleanup' çalıştırmaktı."
Marco

5
Tortoise SVN kullananlar için, kullanıma alma dizininin kök klasöründe temizlemeyi çalıştırabilir ve Kilitleri Zorla'ya zorlayabilirsiniz. Ayrıca, sürümden kaldırılmamış dosyaları silmesini isteyebilirsiniz. Ardından bir güncelleme yapın.
Obaid

476

Benim için, hile, svn cleanupsorun oluşmadan önce çalıştığım klasörde değil, çalışma kopyamın üstünde çalışacaktı .


genellikle çalışıyor ama artık çalışmıyor, çünkü SVN 1.7'ye yükselttiğimden emin değilim
Populus

4
sunucu hala 1.6.x olmasına rağmen 1.7 çalışan bir müşteri ile bu benim için çalıştı
Mark Hosang

1.7 Çok takdir
scarpacci

1
Ben Intu cevap bu bir ipucu birleştirdik: .svn klasöründe bir "kilit" dosyası olan üst klasörü arayın, sonra orada "svn cleanup" çalıştırın. Bu benim için çalıştı.
rob74

5
Bu benim için çalışıyor, Chuck'ın yolundan çok daha hızlı. Bu yüzden önce bunu yapmaya değer.
goamn

210

.svnKlasörünüze bakın , içinde bir dosya olacak lock. Bu dosyayı silerseniz güncelleme yapabilirsiniz. .svnHer alt dizinin dizininde daha fazla kilit dosyası olabilir . Ayrıca silmeleri gerekir. Bu, komut satırından oldukça basit bir şekilde örn.

find . -name 'lock' -exec rm -v {} \;

.svnKlasördeki dosyaları el ile düzenlediğinizi unutmayın . Onlar bir sebepten dolayı oraya konuldu. Bu sebep bir hata olabilir, ancak değilse yerel kopyanıza zarar verebilirsiniz.

KAYNAK: http://www.svnforum.org/2017/viewtopic.php?p=6068


8
+1 Bence bu şu anda en yüksek oyu alan cevabı çok daha iyi bir yaklaşım - Ben bu (yaygın!) Sorunu aşmak için önce başka bir yerde dosyaları kopyalamak zorunda nefret ediyorum. Mine, başka birinin SVN'ye zaten eklediği aynı adı taşıyan dosyalar üreten bir kod oluşturma aracından kaynaklandı. Benim kötü için değil "svn yukarı" ilk sanırım ...
alpian

44
Bu artık Tortoise / SVN 1.7 ile çalışmıyor (ya da en azından artık meta verilerle merkezi bir DB olduğu için herhangi bir kilit dosyası bulamadım).
pesche

10
İşte mevcut dizinde başlayan tüm kilitleri özyinelemeli hızlı bir tek katmanlı:find . | grep ".svn/lock" | xargs rm
Jesse

1
SVN 1.7 ile, @ BradS'in cevabı daha etkili görünüyor. Bu cevap benim için işe yaramadı ve BradS de işe yaradı.
Ira Baxter

1
Benim durumumda hiçbir yerde kilit dosyası yok.
Tim MB

106

Benim durumumda WC_LOCK tablosundaki SQLite ".svn \ wc" dosya kilidi kaydındaki bir kaydı el ile silerek çözdüm.

"WC" dosyasını SQLite editörü ile açtım ve

delete from WC_LOCK

WC_LOCK'tan temizlenen tüm girişleri gösteren ekran görüntüsü

Eakkas'ın yorumunu takiben , WORK_QUEUEtablodaki tüm girişleri de silmeniz gerekebilir .


1
Bu benim için Windows'ta Subversion 1.7.5 için çalıştı. SQLite Expert deneme sürümünü buradan indirebilirsiniz : sqliteexpert.com/download.html . Yukarıdaki SQL sekmesinde "delete" sql deyimini çalıştırdı.
M Katz

Bu çok daha iyi, tek bir fark kırmızı (-) düğmesine tıklamam
Rohit Srivastava

3
Ücretsiz bir DI SQL Spy da işe yarayacaktır
Ivelin Nikolaev

12
Bu da benim için çalıştı ama ben de WORK_QUEUE tablodaki girişleri temizlemek gerekiyordu
eakkas

6
Öğeyi WC_LOCK'dan silerek işe yaramadı - ne işe yaradım, WORK_QUEUE öğemin blob içeriğine bakıyordu ve sorun dosyası olduğundan emin oldum - Dosyayı repo tarayıcısından kaldırdım ve sonra work_queue öğesini sildim - bundan sonra bir temizlik koştu ve geri iş!
GregM

95

Şimdiye kadarki en kolay yol:

  1. Git Veli dizinine (Klasör) ait Projesi .
  2. Pres Sağ tıklama
  3. Basın TortoiseSVN Basın ardından Clean up ...
  4. Temizleme iletişim kutusu otomatik olarak görünecektir
  5. Seç Clean up working copy status, Break locks,Fix time stamps , Vacuum pristine copies, Refresh shell overlays,Include externals
  6. Pres Tamam

İşini başarıyla yaptın.

Referans için ekran görüntülerini kontrol edin.

İlk adım:

resim açıklamasını buraya girin

İkinci adım: Kilidi kır seçeneğini etkinleştirin (açılır pencerede ikinci onay kutusu) resim açıklamasını buraya girin

Umarım bu size çok yardımcı olur.


10
Benim durumumda, "Break lock" seçeneği yeterliydi, belki de önce sadece bunu deneyin
Donatello

İyi cevap. Bu bir 'iletişim körlüğü' olgusu vardı ve asla temizleme seçeneklerini kontrol ettim. Tarihsel olarak, 'köke git ve temizle' işe yaradı ama sanırım kilitleri kırmak benim durumumda yeterliydi ..
Phil Cooper

1
Benim için de çalıştı!
Daniel Silva

Herhangi bir kilit yapmadım çünkü 'kırılma kilitleri' bunu yapacağını düşünmüyordu. Ama görünüşe göre bu soruna neden olan svn-dahili kilitleri kırar. Teşekkürler!
basher

Benim için çalışmadı 😦
Warlike Şempanze

48

İş yerinde bir meslektaşım sürekli bu mesajı görür ve o SVN sürüm kontrolü altında bir dizin silindi çünkü onun için bu kadar olmadan aynı adla, SVN'den silme ve sonra değil sürüm kontrolü altında onun yerine yeni bir dizin oluşturulur.

Sorununuz buysa ...:

Dizinin nasıl değiştirildiğine / neden değiştirildiğine bağlı olarak bunu düzeltmenin farklı yolları vardır.

Her iki durumda da, muhtemelen şunları yapmanız gerekir:

A) Varolan dizini geçici bir adla yeniden adlandırın

B) Dosya sisteminden silinen ancak SVN'den silinmeyen dizini kurtarmak için bir SVN geri alma işlemi yapın

Oradan, ya sen

A) İlgili dosyaları silinen dizine kopyalayın

B) Dizinde içeriğinin önemli bir değişiklik olsaydı, bir SVN, orijinal üzerinde silmek işlemek ve bir SVN ardından istenen isme yeni dizin geri almak için eklemek adlandırmak yapmak o sürüm kontrolü altında birini.


1
İkinci adım B) benim için çok kötü bir fikir gibi görünüyor, çünkü yeni dizinde saklanan orijinal dizinin öğeleri için düzeltme geçmişini kıracaktır.
Dunaril

Çok kötü şeyler, kişi SVN'den değil, sürümlendirilmiş bir dizini dosya sisteminden sildiğinde oldu. Yukarıdaki cevap mükemmel bir iyileşme olmayabilir, ancak bir iyileşmedir.
Teemu Leisti

34

Benim için yukarıdaki çözümlerin hiçbiri işe yaramadı. Kilitleri kırarak bir çözüm buldum. Svn temizleme işlemi gerçekleştirdiğimde, "Çalışan kopya durumunu temizle" ile birlikte "Kilitleri Kır" ı seçtim.

resim açıklamasını buraya girin


Benim için Tortoise SVN repo tarayıcısından kilit kırma çalıştı. Teslim alınan klasörde kilidi kırmak hiçbir şey yapmadı.
Bhargava Mummadireddy

23

Bu benim için çalıştı.

  1. Kök klasöre gidin,
  2. Sağ tıklama ve temizleme
  3. Mevcut tüm seçenekleri işaretleyin
  4. Tamam tuşuna basın

Temizledikten sonra en son sürüme güncellemenizi sağlar.


2
Bu benim için de geçerli. Temizlemeye devam etmek için mevcut tüm seçenekleri (sürümümdeki 6 giriş) kontrol etmeniz gerekir; [Çalışan kopya durumunu temizle] ve [Harici öğeleri dahil et] seçeneklerini işaretlerseniz başarısız olur.
Vincent Jia

1
Bu tamamen benim için çalıştı ... sadece proje> Takım> Temizleme üzerine sağ tıklayarak. .Svn veya başka bir şey SQL herhangi bir satır kaldırmak zorunda değilsiniz. Sadece bu işi yaptı. Teşekkürler!
msqar

Bu benim için de TortoiseSVN 1.7.4 sürümünde çalıştı. Sunulan varsayılan onay kutuları ile gittim.
slm

Bugün bana yardımcı oldu, ancak mevcut tüm seçenekleri kontrol etmeme gerek yoktu. Değişikliklerimi geri döndüren son üçü kontrol etmedim ve yine de çalıştı. Ayrıca bkz stackoverflow.com/a/35192644/460775
EMBarbosa

1
Bu benim için çalıştı. Sadece kontrol Clean up working copy statusve Breaks locksveInclude externals
phiber

11

Benim için, aslında Kaplumbağa'nın hatasıydı, bir nevi. Kaplumbağa sadece "temizleyemiyorum, temiz çalıştırın" şikayet etti, ama komut satırını (svn cleanup) çalıştırdığımda, açıkça kullanılan çözüm olan açık olan bazı dosyaları silemediğini söyledi. Visual Studio'yu (dosyaları açık tutuyordu) kapattıktan sonra temizleme iyi çalıştı.

Diğer programlar da dosyaları depoda açık tutabilir ve bu soruna neden olabilir. Bir xls açık tutan Excel başka bir durumda suçluydu, bu nedenle repoda herhangi bir şey kullanan tüm programları kapatmak, hatta programları kapanmaya zorlamak ve yeniden temizlemeyi denemek için yeniden başlatmak akıllıca olabilir.


7

Harici klasörler varolan bir klasöre bağlanmak istemiyor çünkü bu sorunu yaşadım. Hedefin varolan (sürümlenmiş veya sürümlendirilmemiş) bir klasör olduğu bir svn: externals özellik satırı eklerseniz SVN Woring Copy kilitli hatası alırsınız. Burada bir temizlik de her şeyin yolunda olduğunu ancak güncellemenin işe yaramayacağını söyleyecektir.

Çözüm: Sorunlu klasörü depodan silin ve svn: externals özelliğinin ayarlandığı kök klasörde bir güncelleme yapın. Bu klasörü oluşturur ve her şey yoluna girer.

Bu sorun benim için ortaya çıktı çünkü svn: externals for files, hedef klasörün sürüm denetimli olmasını gerektirir. Bunun farklı depolarda çalışmadığını fark ettikten sonra, harici dosyalardan harici klasöre değiştim ve bu karmaşaya girdim.


6

Bunu yapmanın en kolay yolu gizli klasörleri göstermek ve .SVN klasörünü açmaktır. "Kilit" adında bir sıfır KB dosyası görmeniz gerekir, bunun silinmesi sorunu çözer


5

SVN 1.7 kullanarak aynı sorunla karşılaştım ve yukarıda belirtilen düzeltmelerin hiçbiri işe yaramadı.

En önemlisi, düzenlenen tüm içeriğinizi yedeklediğinizden emin olun.

Birkaç saat geçirdikten sonra (şubem 6 gb'ın üzerinde olduğu için her şeyi yeniden indirmedim), şubenizin .svn klasöründe "wc" adlı bir db dosyası olduğunu gördüm.

Herhangi bir db yöneticisi (i firefox's sqlite manager eklentisi kullandım) kullanarak db dosyasını açın ve WC_LOCK tablosuna gidin. Bu tabloda, elde edilen kilitler için girişler bulunacaktır. Kayıtları tablodan silin ve işiniz bitti :)


önceki yanıtın neredeyse bir kopyası olmasına rağmen, size bir oy verdim çünkü firefox SQLite yöneticisi eklentisinden bahsetmiştiniz.
ehambright

3

Bu sorun olduğunda, doğrudan sorun yol üzerinde temizleme komutunu çalıştığını bulmak genellikle işe yarıyor gibi görünüyor. Sonra tekrar çalışma kökünden temizleme çalıştıracağım ve başka bir dizin hakkında şikayet edecek. ve ben sadece şikayet durdurmak kadar tekrarlayın.


1
Önceki yanıtlarda olduğu gibi bir kilit dosyası bulamadım, ama bu benim için çalıştı :)
serenskye

3

Bir Windows makinesindeyseniz, depoyu bir tarayıcı aracılığıyla görüntüleyin ve aynı dosya adına sahip ancak farklı durumlar kullanan iki dosya görebilirsiniz. Subversion büyük / küçük harfe duyarlıdır ve Windows aynı dosyayı indirdiğini ve Subversion'ın indirmediğini düşündüğünde bir kilit alabilirsiniz. Depodaki yinelenen dosya adlarını silin ve tekrar deneyin.


3

Sadece yeni bir klasör oluşturarak, projeyi kontrol ederek, güncellenmiş dosyaları yeni klasöre kopyalayarak yaptım.

Taze bir ödeme ile düzeltildi.


Ben de aynısını yaptım. (Kök sebebi AnkhSVN'yi çalışma kopyamla karıştırmaya bıraktım. AnkhSVN şimdi kaldırıldı).
Scotty.NET

2

TortoiseSVN kullanıyor ve yeni mi yükseltiyorsunuz? Daha önce 1.4'ten 1.5'e geçerken ve yeniden başlatmadan önce bu problemi yaşadım. (Yeniden başlatmayı deneyin).

Yeniden başlatmanızın nedeni, önbellek dosyasının tamamen korkak olması.

Aksi takdirde, devam etmek için, o çalışma kopyasını yeni bir klasöre dışa aktarın (.svn gizli klasörlerini kopyalamayın), projeyi yeniden kontrol edin ve tüm kodunuzu geri taşıyın, ardından işleminize devam edin.


Bu da benim başıma geldi, sadece yeniden başlatmam gerekiyordu
Matthew Lock

2

.svn klasörlerini silin, ardından üst dizinde bir temizleme çalıştırın. Mükemmel çalışıyor!!


3
SVN 1.7'de, üstte yalnızca bir .svn klasörü olduğundan bu çalışmaz. Silinirse, depoya olan ek kaldırılır.
AnneTheAgile

2

Mac OS altında Sürümlerde: Eylem -> Çalışma kopya kilitlerini temizleme ...


2

Sık sık böyle bir sorunla karşılaşıyorum. Temizleme sorunlarına neden olan kalıbım.

  1. Görüntü dosyasını görüntüleyicide açıyorum.
  2. Görüntü dosyasını / klasörünü silerim.
  3. Taahhüt etmeye / güncellemeye çalışıyorum

Silinen dosyanın açıldığı resim görüntüleyiciyi kapatmak sorunu çözer. Belki başka yazılımlar temizlemeyi aynı şekilde engelleyebilir.

Genel olarak. Bilgisayarı yeniden başlatmanın bu gibi durumlarda yardımcı olabileceğine inanıyorum.


1

SVN, gerçek dosyalar depodan alınmadan önce normalde bir klasördeki dosyaların iç yapısını (.svn / prop-base) güncelleştirir. Dosyalar getirildikten sonra temizlenir. Güncelleme ilerlemesi sırasında "güncelleme" başarısız olduğu veya erken iptal edildiği için sıklıkla hata atılır.

  1. Dosyaların .svn / prop-base dizininde listelendiğini kontrol edin
  2. Klasörün altında olmayan tüm dosyaları kaldırın
  3. Temizlemek
  4. Güncelleme

Şimdi güncelleme çalışmalı.


1

Aynı sorun vardı çünkü sürüm kontrollü bir klasör altında bir klasör ihraç. Klasörü TortoiseSVN'den silmek zorunda kaldım, daha sonra klasörü dosya sisteminden silmek zorunda kaldım (TortoiseSVN, sürüm değiştirilmemiş alt klasörleri sevmez ... neden olmasın ???)


SAME FOLDER'a bir klasör ihraç ettiğimi eklemeliyim ... sürüm klasörler.

1

Aramayı Başlat ... Kilitle ... Listelenen tüm dosyaları seç ve sil .. düzeltildi


1

aşağıdakileri yapmalıdır:

svn durumu | grep ". L" | sed 's /.* (. *) $ / \ 1 /' | awk '{baskı uzunluğu ($ 1), $ 1}' | sıralama -nr | awk '{print "pushd" $ 2 "; svn temizleme; popd"}' | sh


1

Çözümünüzü silmeyin!

.svn klasöründe 0 bayt uzunluğunda kilit adlı bir dosya var

Tüm bu dosyaları çözümünüzdeki tüm .svn klasörlerinden silebilirsiniz ve çalışır

Benim durumumda çalıştı


Bu en basit çözüm! Benim için çalıştı
Nathan

Evet, maalesef SVN'nin en son sürümü için çalışmıyor. En son sürüm için, artık bir kilit dosyası olmadığından silmeniz gerekir. artık herhangi bir dosya yok gibi görünüyor başka bir klasör yapısı var. Herhangi biri hala yukarıdaki gibi bir şekilde değiştirilebilecek bir şey olup olmadığını biliyorsa, lütfen bizimle paylaşın.
Para

1

Dosyaların yerinde ters çevrilmesi ve aynı konuma yeni bir ödeme, bu sorunu benim için çözdü.

TortoiseSVN'de yerinde ters çevirmek için, çalışma kopyasının kök klasörünü dosya listesinden dizin ağacında kendisine sürükleyin ve açılır menüden "SVN Sürümlü öğeleri buraya aktar" ı seçin. TortoiseSVN, hedefin kaynakla aynı olduğunu fark eder ve çalışan kopyanın ters çevrilmesini önerir.

Sürüklemeden sonra, aynı klasöre yeni bir ödeme yapın (artık sahip olduğunuz tüm dosyaların sürümden kaldırılmış bir kopyasını içerir). TortoiseSVN mevcut bir klasöre baktığınız konusunda sizi uyarır, ancak devam edebilirsiniz.

Bundan sonra, temizlik, güncelleme ve diğer işlemler sorunsuz bir şekilde çalıştı. Yukarıdaki adımların her ikisi de yerel değişiklikleri koruduğundan, herhangi bir bilgi kaybı olmamalıdır (ancak çalışma kopyasını bundan önce yedeklemek yine de iyi bir fikir olabilir).

Bir uyarı: Çalışan kopya karışık sürümler veya taahhüt edilmemiş özellik değişiklikleri içeriyorsa, bu bilgiler kaybolur. Benim için bu yaygın bir durum değil ve bozuk bir çalışma kopyası veya taahhüt edilmemiş özellik değişikliklerini kaybetme seçeneği göz önüne alındığında, ikincisini tercih etme eğilimindeyim.


1

Ben "temiz" çalıştı, ancak "güncelleme" başarısız devam bu sorun vardı. İşe yarayan çözüm, TortoiseSVN'nin silme işlemini değil, söz konusu klasörü Windows Gezgini ile silmekti (silme işlemini depoya işlenecek bir şey olarak işaretler ve daha sonra klasörü depodan "güncellemek" için bir "ödeme" yaptım.

O / S silme ile SVN silme arasındaki fark hakkında daha fazla bilgi burada: http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-rename.html

Özellikle:

TortoiseSVN → Bir dosyayı sildiğinizde, derhal çalışma kopyanızdan kaldırılır ve bir sonraki işlemde depoda silinmek üzere işaretlenir.

Ve:

TortoiseSVN içerik menüsünü kullanmak yerine bir dosya gezgin aracılığıyla silinirse, kaydetme iletişim kutusu bu dosyaları gösterir ve kaydetmeden önce de sürüm denetiminden kaldırmanıza izin verir. Ancak, çalışma kopyanızı güncelleştirirseniz, Subversion eksik dosyayı bulur ve depodaki en son sürümle değiştirir.


1

Linux kullanıyorsanız, şunu deneyin:

find "/the/path/to/your/directory" -name .svn -type d | xargs chmod 0777 -R

Sonra cleanupbu dizinde komutu çalıştırın , sonra güncellemeyi deneyin.


1

Sorunumu çözmek için aşağıdakileri yaptım:

  1. Klasör adının önüne "_" koyarak rahatsız edici klasörü yeniden adlandırın.
  2. Üst klasörün bir "Temizle".
  3. Sorunlu klasörü yeniden orijinal adıyla yeniden adlandırdı.
  4. Bir taahhütte bulundum.

1

Çözüm gezgininde, projeye sağ tıklayın, açılış alt menüsünde alt sürüme tıklayın ve temizlemeyi seçin. Sorunu benim için olduğu gibi çözecek. Umarım işe yarar.


1

Temizliği yapmak için

  1. .Svn klasörünü silin.

  2. Kök klasöründe svncheckout yapın.

  3. Temizleme işlemini yapmayı deneyin.

Bu benim sorunumu çözdü.

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.