Kopia robocza XXX została zablokowana i czyszczenie nie powiodło się w SVN

582

Ten błąd pojawia się, gdy svn update:

Kopia robocza XXXXXXXX zablokowana Wykonaj polecenie „Oczyść”

Kiedy uruchamiam czyszczenie, dostaję

Czyszczenie nie przetworzyło następujących ścieżek: XXXXXXXX

Jak wyjść z tej pętli?

Dan
źródło
5
Dostałem też tę wiadomość. Dostarczone odpowiedzi wyglądały na nieco żmudne (zwłaszcza te, które uzyskały najwyższy głos). Właśnie zamknąłem VS i ponownie założyłem rozwiązanie i mogłem wszystko sprawdzić w porządku.
oscilatingcretin
Po komentarzu eakkas, aby usunąć wpisy z tabeli WORK_QUEUE za pomocą SQLLite Managera w Firefoksie, naprawiłem ten problem.
zeppelin
12
Jest prosta odpowiedź, po prostu zaznacz opcję „zrywaj zamki”, a to wyczyści twoją kopię roboczą
Farhan

Odpowiedzi:

517

Jednym podejściem byłoby:

  1. Skopiuj edytowane elementy do innej lokalizacji.
  2. Usuń folder zawierający ścieżkę problemu.
  3. Zaktualizuj folder zawierający za pomocą Subversion.
  4. Skopiuj pliki z powrotem lub scal zmiany w razie potrzeby.
  5. Popełnić

Inną opcją byłoby usunięcie folderu najwyższego poziomu i ponowne sprawdzenie. Mam nadzieję, że do tego nie doszło.

Chuck
źródło
123
Daj +1 za to obejście, które pozwoli rozwiązać nie tylko problem PO (i mój), ale także za wykonanie 5 kroków, które wydają się rozwiązać każdy problem svn. -1 do subversion dla potrzeb takich obejść.
pxl
34
Chociaż technicznie to działa, jest to tak zły sposób, aby to zrobić w porównaniu do usunięcia blokad, że zasługuje na głosowanie negatywne.
Jukka Dahlbom
8
Nie mogę zrobić kroku 3, ponieważ ... „Kopia robocza jest już zablokowana”
Evgeny
20
Zastanów się nad radą BradSa: „Dla mnie sztuczką było uruchomienie„ svn cleanup ”na górze mojej kopii roboczej, a nie w folderze, w którym cały czas pracowałem przed wystąpieniem problemu.”
Marco
5
Dla tych, którzy używają Tortoise SVN, możesz uruchomić czyszczenie w folderze głównym katalogu wyewidencjonowania i wymusić Break Locks. Dodatkowo możesz poprosić go o usunięcie niewersjonowanych plików. Następnie weź aktualizację.
Obaid,
476

Dla mnie sztuczka polegała na uruchomieniu svn cleanupna górze mojej kopii roboczej, a nie w folderze, w którym pracowałem przez cały czas przed wystąpieniem problemu.

BradS
źródło
zwykle działa, ale już nie działa, nie jestem pewien, czy to dlatego, że zaktualizowałem do wersji SVN 1.7
Populus
4
zadziałało to dla mnie z klientem w wersji 1.7, chociaż serwer wciąż jest w wersji 1.6.x
Mark Hosang
Pracowałem dla 1,7 bardzo doceniony
scarpacci
1
Połączyłem wskazówkę z odpowiedzi Intu z następującą: poszukaj folderu nadrzędnego, który ma plik „lock” w folderze .svn, a następnie uruchom tam „svn cleanup”. To działało dla mnie.
rob74
5
To działa dla mnie znacznie szybciej niż Chuck. Warto najpierw to zrobić.
goamn
210

Zajrzyj do twojego .svnfolderu, znajdzie się w nim plik o nazwie lock. Usuń ten plik, a będziesz mógł zaktualizować. W .svnkatalogu każdego podkatalogu może znajdować się więcej plików blokujących . Będą również musieli usunąć. Można to zrobić jako partia po prostu z wiersza poleceń za pomocą np

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

Pamiętaj, że ręcznie edytujesz pliki w .svnfolderze. Zostali tam umieszczeni bez powodu. Może to być pomyłka, ale jeśli nie, możesz uszkodzić lokalną kopię.

ŹRÓDŁO: http://www.svnforum.org/2017/viewtopic.php?p=6068

Intu
źródło
8
+1 Myślę, że jest to znacznie lepsze podejście niż obecnie najwyższa głosowana odpowiedź - Nienawidzę konieczności kopiowania plików gdzie indziej, aby obejść ten (powszechny!) Problem. Mój był spowodowany przez narzędzie do generowania kodu generujące pliki o tej samej nazwie, które ktoś już dodał do SVN. Mój zły za to, że najpierw nie „svn się”, przypuszczam ...
alpejski
44
To już nie działa z Tortoise / SVN 1.7 (a przynajmniej nie mogłem znaleźć żadnego pliku blokady, ponieważ istnieje teraz scentralizowana baza danych z metadanymi).
pesche,
10
oto szybki jednowierszowy program, który powinien rekurencyjnie usuwać wszystkie blokady zaczynające się w bieżącym katalogu:find . | grep ".svn/lock" | xargs rm
Jesse
1
W przypadku SVN 1.7 odpowiedź @ BradS wydaje się bardziej skuteczna. Ta odpowiedź nie zadziałała dla mnie, podobnie jak BradS.
Ira Baxter,
1
W moim przypadku nigdzie nie ma pliku blokady.
Tim MB
106

W moim przypadku rozwiązałem go, ręcznie usuwając rekord z rekordu blokady pliku SQLite „.svn \ wc” w tabeli WC_LOCK.

Otworzyłem plik „WC” za pomocą edytora SQLite i wykonałem

delete from WC_LOCK

zrzut ekranu pokazujący wszystkie wpisy usunięte z WC_LOCK

Po komentarzu eakkas może być konieczne usunięcie wszystkich wpisów z WORK_QUEUEtabeli.

Gad D Lord
źródło
1
To działało dla mnie dla Subversion 1.7.5 w systemie Windows. Pobrano wersję próbną SQLite Expert stąd: sqliteexpert.com/download.html . Wykonano powyższą instrukcję „delete” sql na karcie SQL.
M Katz
Jest to o wiele lepsze, jedna różnica polega na tym, że kliknąłem czerwony przycisk (-)
Rohit Srivastava
3
Darmowy szpieg DI SQL również by to zrobił: yunqa.de/delphi/doku.php/products/sqlitespy/index
Ivelin Nikolaev
12
To również działało dla mnie, ale musiałem również wyczyścić wpisy w tabeli
WORK_QUEUE
6
Nie działało, usuwając element z WC_LOCK - działało sprawdzanie zawartości obiektu blob mojego elementu WORK_QUEUE i na pewno był to plik problemu - usunąłem plik z przeglądarki repo, a następnie usunąłem element work_queue - po tym przeprowadziłem porządki i wróciłem do pracy!
GregM,
95

Najłatwiejszy sposób:

  1. Przejdź do katalogu nadrzędnego (folder) z Projektu .
  2. Naciśnij prawy przycisk myszy
  3. Naciśnij TortoiseSVN, a następnie naciśnij Wyczyść ...
  4. Okno dialogowe czyszczenia pojawi się automatycznie
  5. Wybierz Clean up working copy status, Break locks, Fix time stamps, Vacuum pristine copies, Refresh shell overlays,Include externals
  6. Naciśnij OK

Wykonałeś swoją pracę z powodzeniem.

Sprawdź zrzuty ekranu w celach informacyjnych.

Pierwszy krok:

wprowadź opis zdjęcia tutaj

Drugi krok: włącz opcję Break lock (drugie pole wyboru w oknie podręcznym czyszczenia) wprowadź opis zdjęcia tutaj

Mam nadzieję, że to ci bardzo pomoże.

Hiren Patel
źródło
10
w moim przypadku wystarczająca była opcja „Zablokuj blokadę”, może najpierw spróbuj tylko z tym jednym
Donatello
Dobra odpowiedź. Miałem przypadek „ślepoty dialogowej” z tym i nigdy nie sprawdzałem opcji czyszczenia. Historycznie „nawigacja do rootowania i czyszczenia” kiedyś działała, ale chyba w moim przypadku wystarczyło złamanie zamków.
Phil Cooper
1
Pracowałem też dla mnie!
Daniel Silva
Nie sądziłem, że zrobią to „włamanie zamków”, ponieważ nie zrobiłem żadnych zamków. Ale najwyraźniej łamie wewnętrzne blokady svn, które były przyczyną tego problemu. Dzięki!
basher
Nie działało dla mnie 😦
Chimpanzee
48

Kolega z pracy ciągle widzi tę wiadomość, a dla niego dzieje się tak dlatego, że usunął katalog pod kontrolą wersji SVN bez usuwania go z SVN, a następnie utworzył nowy katalog na swoim miejscu, który nie jest pod kontrolą wersji, o tej samej nazwie.

Jeśli to twój problem ...:

Istnieją różne sposoby naprawy tego problemu, w zależności od tego, w jaki sposób / dlaczego katalog został zastąpiony.

Tak czy inaczej, prawdopodobnie będziesz musiał:

A) Zmień nazwę istniejącego katalogu na tymczasową nazwę

B) Wykonaj przywracanie SVN, aby odzyskać katalog usunięty z systemu plików, ale nie z SVN

Stamtąd ty też

A) Skopiuj odpowiednie pliki do katalogu, który został usunięty

B) Jeśli miał istotną zmianę treści w książce telefonicznej, zrobić SVN usunąć na oryginale, popełnić, i zmienić swoją nowy katalog z powrotem do żądanej nazwy, a następnie przez SVN, aby dodać , że jeden pod kontrolą wersji.

Matt
źródło
1
Twój drugi krok B) wydaje mi się bardzo złym pomysłem, ponieważ zepsułby historię zmian pozycji oryginalnego katalogu przechowywanych w nowej wersji.
Dunaril
Bardzo złe rzeczy zdarzyły się, gdy osoba usunęła wersjonowany katalog z systemu plików, ale nie z SVN. Powyższa odpowiedź może nie być doskonałym odzyskiem, ale jest odzyskiwaniem.
Teemu Leisti
34

Dla mnie żadne z powyższych rozwiązań nie zadziałało. Znalazłem rozwiązanie, łamiąc zamki. Kiedy przeprowadziłem czyszczenie svn, wybrałem „Przerwij blokady” wraz z „Wyczyść stan kopii roboczej”.

wprowadź opis zdjęcia tutaj

LoveForDroid
źródło
U mnie zadziałał blokada z przeglądarki repozytorium Tortoise SVN. Złamanie blokady w wyewidencjonowanym folderze nic nie zrobiło.
Bhargava Mummadireddy
23

Ten działał dla mnie.

  1. Przejdź do folderu głównego,
  2. Kliknij prawym przyciskiem myszy i wyczyść
  3. Sprawdź wszystkie dostępne opcje
  4. Wciśnij OK

Po wyczyszczeniu umożliwi aktualizację do najnowszej wersji.

Lanca
źródło
2
To też działa dla mnie. Musisz sprawdzić wszystkie dostępne opcje (6 wpisów w mojej wersji), aby kontynuować Czyszczenie; kończy się niepowodzeniem, jeśli po prostu zaznaczysz opcje [Wyczyść status kopii roboczej] i [Uwzględnij zewnętrzne].
Vincent Jia,
1
To całkowicie działało dla mnie ... wystarczy kliknąć prawym przyciskiem myszy projekt> Zespół> Oczyszczanie. Nie musiałem usuwać żadnego wiersza z SQL w .svn ani niczego innego. Właśnie to spełniło zadanie. Dzięki!
msqar
Działa to również dla mnie w wersji 1.7.4 TortoiseSVN. Poszedłem z domyślnymi polami wyboru, które zostały przedstawione.
slm
Pomógł mi dzisiaj, ale nie musiałem sprawdzać wszystkich dostępnych opcji. Ostatnich trzech, które cofnęły moje zmiany, nie sprawdziłem, a i tak zadziałało. Zobacz także stackoverflow.com/a/35192644/460775
EMBarbosa
1
To zadziałało dla mnie. Właśnie sprawdziłem Clean up working copy statusi Breaks locksiInclude externals
Phiber
11

Dla mnie była to właściwie wina Tortoise. Tortoise po prostu narzekało: „nie można wyczyścić, uruchomić czyszczenia”, ale kiedy uruchomiłem wiersz poleceń (czyszczenie svn), wyraźnie mi powiedział, że nie może usunąć niektórych używanych plików, co było oczywiste. Po zamknięciu programu Visual Studio (który utrzymywał pliki otwarte), czyszczenie działało poprawnie.

Inne programy mogą również utrzymywać otwarte pliki w repozytorium, powodując ten problem. Program Excel trzymający otwartą bibliotekę xls był winowajcą w innej instancji, więc rozsądne może być zamknięcie wszystkich programów, które mogą korzystać z czegokolwiek w repozytorium lub nawet ponowne uruchomienie w celu wymuszenia zamknięcia programów, a następnie ponownej próby wyczyszczenia.

Mark Sowul
źródło
7

Miałem ten problem, ponieważ foldery zewnętrzne nie chcą być połączone z istniejącym folderem. Jeśli dodasz wiersz właściwości svn: externals, w którym miejscem docelowym jest istniejący (wersjonowany lub nie wersjonowany) folder, pojawi się błąd zablokowania kopiowania SVN. Tutaj czyszczenie powie ci również, że wszystko jest w porządku, ale wciąż aktualizacja nie będzie działać.

Rozwiązanie: Usuń problematyczny folder z repozytorium i dokonaj aktualizacji w folderze głównym, w którym ustawiono właściwość svn: externals. Spowoduje to utworzenie folderu i wszystko znów będzie dobrze.

Ten problem powstał dla mnie, ponieważ svn: externals dla plików wymaga kontrolowania wersji folderu docelowego. Po tym, jak zauważyłem, że to nie działa w różnych repozytoriach, zmieniłem pliki zewnętrzne na folder zewnętrzny i wpadłem w ten bałagan.

Oliver Zendel
źródło
6

Najłatwiej to zrobić, pokazując ukryte foldery, a następnie otwierając folder .SVN. Powinieneś zobaczyć zerowy plik KB o nazwie „blokada”. Usunięcie tego rozwiąże problem

fawefawefa
źródło
5

Natrafiłem na ten sam problem przy użyciu SVN 1.7 i żadna z wyżej wymienionych poprawek nie działała.

Przede wszystkim upewnij się, że wykonałeś kopię zapasową wszystkich edytowanych treści.

Po spędzeniu kilku godzin (nie pobrałem ponownie wszystkiego, ponieważ mój oddział ma rozmiar ponad 6 GB), znalazłem plik db o nazwie „wc” w folderze .svn twojego oddziału.

Otwórz plik db za pomocą dowolnego menedżera db (użyłem wtyczki sqlite menedżera firefox) i przejdź do tabeli WC_LOCK. Ta tabela będzie zawierać wpisy dotyczące uzyskanych zamków. Usuń rekordy ze stołu i gotowe :)

Rohan
źródło
mimo że była to w zasadzie kopia poprzedniej odpowiedzi, oddałem ci głos, ponieważ wspomniałeś o wtyczce menedżera firefox SQLite.
ehambright
3

Gdy mam ten problem, wydaje mi się, że uruchomienie polecenia czyszczenia bezpośrednio na ścieżce problemu zwykle działa. Potem ponownie uruchomię czyszczenie z działającego katalogu głównego i narzeka na jakiś inny katalog. i powtarzam, aż przestanie narzekać.

Stephen
źródło
1
Nie mogłem znaleźć pliku blokady, jak w poprzednich odpowiedziach, ale zadziałało to dla mnie :)
serenskye
3

Jeśli korzystasz z komputera z systemem Windows, przejrzyj repozytorium za pomocą przeglądarki i możesz zobaczyć dwa pliki o tej samej nazwie, ale w różnych przypadkach. W Subversion rozróżniana jest wielkość liter, a Windows nie jest w stanie, więc można uzyskać blokadę, gdy Windows myśli, że ściąga ten sam plik, a Subversion nie. Usuń zduplikowane nazwy plików z repozytorium i spróbuj ponownie.

toksaq
źródło
3

Zrobiłem to, tworząc nowy folder, sprawdzając projekt, kopiując zaktualizowane pliki do nowego folderu.

Zostało to naprawione dzięki nowej kasie.

Don
źródło
Zrobiłem to samo. (Podstawową przyczynę sprowadzam do bałaganu AnkhSVN w mojej kopii roboczej. AnkhSVN jest teraz odinstalowany).
Scotty.NET
2

Czy używasz TortoiseSVN i właśnie zaktualizowałeś? Miałem już ten problem przy przejściu z wersji 1.4 na 1.5 i braku restartu. (Spróbuj uruchomić ponownie).

Powodem, dla którego musisz zrestartować komputer, jest to, że plik pamięci podręcznej staje się funkcjonalny.

W przeciwnym razie, aby przejść dalej, wyeksportuj tę kopię roboczą do nowego folderu (nie kopiuj ukrytych folderów .svn), ponownie sprawdź projekt i przenieś cały kod z powrotem, a następnie kontynuuj zatwierdzanie.

Adam
źródło
To samo mi się przydarzyło, to znaczy, że musiałem zrestartować komputer
Matthew Lock
2

po prostu usuń foldery .svn, a następnie uruchom czyszczenie w katalogu nadrzędnym. Działa świetnie!!

Ben
źródło
3
W SVN 1.7 to nie zadziała, ponieważ na górze jest tylko jeden folder .svn. Jeśli zostanie usunięty, załącznik do repozytorium zostanie usunięty.
AnneTheAgile,
2

W wersjach systemu Mac OS: Działanie -> Czyszczenie kopii roboczych blokuje się w ...

HotJard
źródło
2

Często mam taki problem. Mój wzór, który powoduje problemy z czyszczeniem.

  1. Otwieram plik obrazu w przeglądarce.
  2. Usuwam plik obrazu / folder.
  3. Próbuję zatwierdzić / zaktualizować

Zamykanie przeglądarki zdjęć, w której otwierany jest usunięty plik, rozwiązuje problem. Być może inne oprogramowanie może blokować czyszczenie w ten sam sposób.

Ogólnie. Uważam, że ponowne uruchomienie komputera może w takich przypadkach pomóc.

Dmitrij Borysów
źródło
1

SVN zwykle aktualizuje swoją wewnętrzną strukturę (.svn / prop-base) plików w folderze przed pobraniem rzeczywistych plików z repozytorium. Po pobraniu plików zostanie to usunięte. Błąd jest często zgłaszany, ponieważ „aktualizacja” nie powiodła się lub została przedwcześnie anulowana podczas postępu aktualizacji.

  1. Sprawdź, czy jakieś pliki są wymienione w katalogu .svn / prop-base
  2. Usuń wszystkie pliki, które nie znajdują się w folderze
  3. Sprzątać
  4. Aktualizacja

Teraz aktualizacja powinna działać.

lud0h
źródło
1

Miałem ten sam problem, ponieważ wyeksportowałem folder do folderu z kontrolą wersji. Musiałem usunąć folder z TortoiseSVN, a następnie usunąć folder z systemu plików (TortoiseSVN nie lubi niewersjonowanych podfolderów ... dlaczego nie ???)


źródło
Powinienem dodać, że wyeksportowałem folder do TEGO SAMEGO FOLDERU. W ten sposób wycofałeś poprzednią wersję. wersjonowane foldery.
1

Rozpocznij wyszukiwanie .... Zablokuj ... Wybierz wszystkie pliki na liście i usuń ... naprawione

Ryan
źródło
1

następujące czynności powinny:

status svn | grep ". L" | sed 's /.* (. *) $ / \ 1 /' | awk '{długość wydruku (1 $), 1 $}' | sort -nr | awk '{print "pushd" $ 2 "; svn cleanup; popd"}' | sh

podajnik błędów
źródło
1

Nie usuwaj swojego rozwiązania!

w folderze .svn znajduje się plik o nazwie lock o długości 0 bajtów

Możesz usunąć wszystkie te pliki ze wszystkich folderów .svn w swoim rozwiązaniu i będzie działać

W moim przypadku zadziałało

Para
źródło
To jest najprostsze rozwiązanie! Pracował dla mnie
Nathan
Tak, niestety nie działa w najnowszej wersji SVN. W najnowszej wersji musisz ją usunąć, ponieważ nie ma już pliku blokady. wydaje się, że nie ma już żadnych plików, istnieje cała inna struktura folderów. Jeśli ktoś wie, czy istnieje coś, co można jeszcze zmodyfikować w sposób podobny do powyższego, prosimy o podzielenie się z nami.
Para
1

Odwrócenie plików na miejscu i ponowne pobranie w tej samej lokalizacji rozwiązało dla mnie ten problem.

W TortoiseSVN, aby wykonać odwracanie w miejscu, przeciągnij folder główny kopii roboczej z listy plików do siebie w drzewie katalogów i wybierz z menu podręcznego opcję „SVN Export wersjonowane elementy tutaj”. TortoiseSVN zauważa, że ​​miejsce docelowe jest takie samo jak źródło, i sugeruje odwrócenie kopii roboczej.

Po odwróceniu wykonaj świeżą transakcję w tym samym folderze (który teraz zawiera niewersjonowaną kopię wszystkich plików, które posiadałeś). TortoiseSVN ostrzeże Cię, że sprawdzasz w istniejącym folderze, ale możesz iść dalej.

Następnie porządki, aktualizacje i inne operacje działały bez żadnych problemów. Ponieważ oba powyższe kroki zachowują lokalne modyfikacje, nie powinna nastąpić utrata informacji (ale tworzenie kopii zapasowej kopii roboczej przed tym może jednak być dobrym pomysłem).

Jedno ostrzeżenie: jeśli kopia robocza zawiera wersje mieszane lub niezatwierdzone zmiany właściwości, informacje te zostaną utracone. Dla mnie nie jest to częste zdarzenie, a biorąc pod uwagę wybór uszkodzonej kopii roboczej lub utratę niezaangażowanych zmian własności, wybieram to drugie.

Magnus
źródło
1

Miałem ten problem, w którym działało „czyszczenie”, ale „aktualizacja” nadal nie powiodła się. Rozwiązaniem, które działało, było usunięcie danego folderu za pomocą Eksploratora Windows, a nie usunięcie TortoiseSVN (co oznacza usunięcie jako coś do zatwierdzenia w repozytorium, a następnie zrobiłem „pobranie”, aby zasadniczo „zaktualizować” folder z repozytorium.

Więcej informacji na temat różnicy między usunięciem O / S a usunięciem SVN tutaj: http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-rename.html

Szczególnie:

Kiedy TortoiseSVN → Usuń plik, jest on natychmiast usuwany z kopii roboczej, a także oznaczany do usunięcia w repozytorium przy następnym zatwierdzeniu.

I:

Jeśli plik zostanie usunięty za pomocą eksploratora zamiast menu kontekstowego TortoiseSVN, okno dialogowe zatwierdzenia pokazuje te pliki i pozwala usunąć je również z kontroli wersji przed zatwierdzeniem. Jeśli jednak zaktualizujesz kopię roboczą, Subversion wykryje brakujący plik i zastąpi go najnowszą wersją z repozytorium.

Xonatron
źródło
1

Jeśli korzystasz z systemu Linux, spróbuj tego:

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

Następnie uruchom cleanuppolecenie w tym katalogu, a następnie spróbuj zaktualizować.

The Love Of Ocde
źródło
1

Wykonałem następujące czynności, aby naprawić problem:

  1. Zmień nazwę folderu, który go narusza, umieszczając „_” przed nazwą folderu.
  2. Wykonano „Oczyść” folder nadrzędny.
  3. Zmieniono nazwę folderu naruszającego na pierwotną nazwę.
  4. Dokonał zatwierdzenia.
użytkownik1319487
źródło
1

W eksploratorze rozwiązań kliknij prawym przyciskiem myszy projekt, w podmenu otwierającym kliknij subversion i wybierz czyszczenie. Rozwiąże problem, tak jak dla mnie. Mam nadzieję, że to zadziała.

Nadeem Jamali
źródło
1

Aby zrobić porządek

  1. Usuń folder .svn.

  2. Wykonaj svncheckout w folderze głównym.

  3. Spróbuj wykonać operację czyszczenia.

To rozwiązało mój problem.

Jayaguru
źródło