Copia di lavoro XXX bloccata e pulizia non riuscita in SVN


582

Ottengo questo errore quando faccio un svn update:

Copia di lavoro XXXXXXXX bloccata Eseguire il comando "Pulizia"

Quando eseguo la pulizia, ottengo

La pulizia non è riuscita a elaborare i seguenti percorsi: XXXXXXXX

Come posso uscire da questo ciclo?


5
Ho ricevuto anche questo messaggio. Le risposte fornite sembravano un po 'noiose (specialmente la più votata). Ho appena chiuso VS e ripreso la soluzione e sono stato in grado di controllare tutto alla perfezione.
oscilatingcretin,

Il seguente commento di eakkas per eliminare le voci dalla tabella WORK_QUEUE utilizzando SQLLite Manager di Firefox ha risolto il problema per me.
zeppelin,

12
C'è una risposta semplice, basta selezionare l'opzione "Rompi i blocchi" e questo pulirà la tua copia di lavoro
Farhan,

Risposte:


517

Un approccio sarebbe quello di:

  1. Copia gli elementi modificati in un'altra posizione.
  2. Elimina la cartella contenente il percorso del problema.
  3. Aggiorna la cartella contenente tramite Subversion.
  4. Copia i tuoi file indietro o unisci le modifiche secondo necessità.
  5. Commettere

Un'altra opzione sarebbe quella di eliminare la cartella di livello superiore e ricontrollare. Spero che non ci arrivi.


123
Fai +1 su di te per questa soluzione alternativa per risolvere non solo il problema del PO (e il mio), ma anche per dare i 5 passaggi che sembrano risolvere qualsiasi problema svn. -1 alla sovversione per tali soluzioni alternative necessarie.
pxl

34
Mentre questo funziona tecnicamente, è un modo così brutto per farlo rispetto alla rimozione dei blocchi che merita un downvote.
Jukka Dahlbom,

8
Non posso fare il passo 3 perché ... "La copia di lavoro è già bloccata"
Evgeny,

20
Considera il consiglio di BradS "Per me, il trucco era eseguire" svn cleanup "nella parte superiore della mia copia di lavoro, non nella cartella in cui avevo lavorato tutto il tempo prima che si verificasse il problema."
Marco

5
Per coloro che utilizzano Tortoise SVN, è possibile eseguire la pulizia nella cartella principale della directory di check-out e forzare Break Locks. Inoltre, puoi chiedergli di eliminare i file non controllati. Quindi prendi un aggiornamento.
Obaid,

476

Per me, il trucco era correre svn cleanupnella parte superiore della mia copia di lavoro, non nella cartella in cui avevo lavorato tutto il tempo prima che si verificasse il problema.


di solito funziona ma non funziona più, non sono sicuro se è perché ho eseguito l'aggiornamento a SVN 1.7
Populus

4
questo ha funzionato per me con un client che esegue 1.7, anche se il server è ancora 1.6.x
Mark Hosang

Ha funzionato per me su 1.7 molto apprezzato
scarpacci,

1
Ho combinato il suggerimento della risposta di Intu con questo: cerca la cartella principale che ha un file "lock" nella sua cartella .svn, quindi esegui "svn cleanup" lì. Questo ha funzionato per me.
rob74,

5
Questo funziona per me, in modo molto più veloce di quello di Chuck. Quindi vale la pena fare questo prima.
goamn,

210

Cerca nella tua .svncartella, ci sarà un file chiamato lock. Elimina quel file e sarai in grado di aggiornare. Potrebbero esserci più file di blocco nella .svndirectory di ogni sottodirectory. Dovranno anche eliminare. Questo potrebbe essere fatto semplicemente come un batch dalla riga di comando con es

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

Si noti che si stanno modificando manualmente i file nella .svncartella. Sono stati messi lì per un motivo. Tale motivo potrebbe essere un errore, ma in caso contrario potresti danneggiare la tua copia locale.

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


8
+1 Penso che questo sia un approccio molto migliore della risposta attualmente più votata: odio dover prima copiare i file altrove per aggirare questo (comune!) Problema. Il mio era causato da uno strumento di generazione del codice che generava file con lo stesso nome che qualcun altro aveva già aggiunto a SVN. Il mio male per non "svn up" prima suppongo ...
alpian

44
Questo non funziona più con Tortoise / SVN 1.7 (o almeno non sono riuscito a trovare alcun file di blocco in quanto ora esiste un DB centralizzato con i metadati).
Pesche,

10
ecco un breve one-liner che dovrebbe eliminare in modo ricorsivo tutti i blocchi a partire dalla directory corrente:find . | grep ".svn/lock" | xargs rm
Jesse

1
Con SVN 1.7, la risposta di @ BradS sembra più efficace. Questa risposta non ha funzionato per me, e BradS ha fatto.
Ira Baxter,

1
Nel mio caso, non è possibile trovare file di blocco ovunque.
Tim MB,

106

Nel mio caso l'ho risolto eliminando manualmente un record nel record di blocco file ".svn \ wc" di SQLite nella tabella WC_LOCK.

Ho aperto il file "WC" con l'editor SQLite ed eseguito

delete from WC_LOCK

screenshot che mostra tutte le voci eliminate da WC_LOCK

A seguito del commento di eakkas , potrebbe essere necessario eliminare anche tutte le voci dalla WORK_QUEUEtabella.


1
Questo ha funzionato per me per Subversion 1.7.5 su Windows. Versione di prova di SQLite Expert scaricata da qui: sqliteexpert.com/download.html . Ho eseguito l'istruzione sql "elimina" sopra nella scheda SQL.
M Katz,

Questo è molto meglio, solo una differenza è che ho fatto clic sul pulsante rosso (-)
Rohit Srivastava

3
Una spia DI SQL gratuita farebbe anche il trucco: yunqa.de/delphi/doku.php/products/sqlitespy/index
Ivelin Nikolaev

12
Questo ha funzionato anche per me, ma dovevo anche eliminare le voci nella tabella
WORK_QUEUE

6
Non ha funzionato eliminando l'elemento da WC_LOCK - ciò che funzionava era guardare il contenuto BLOB del mio oggetto WORK_QUEUE e sicuramente era il file di problema - Ho rimosso il file dal browser repository e quindi eliminato l'elemento work_queue - dopo questo ha fatto una pulizia e di nuovo in affari!
GregM,

95

Il modo più semplice di sempre:

  1. Vai alla directory principale (cartella) del progetto .
  2. Pres Fare clic con il tasto destro
  3. Premere su TortoiseSVN quindi premere Pulisci ...
  4. La finestra di dialogo di pulizia apparirà automaticamente
  5. Selezionare Clean up working copy status, Break locks, Fix time stamps, Vacuum pristine copies, Refresh shell overlays,Include externals
  6. Pres OK

Hai fatto il tuo lavoro con successo.

Controlla le schermate per il tuo riferimento.

Primo passo:

inserisci qui la descrizione dell'immagine

Secondo passaggio: abilitare l'opzione Blocco interruzioni (seconda casella di controllo nella finestra popup di pulizia) inserisci qui la descrizione dell'immagine

Spero che questo ti possa aiutare molto.


10
nel mio caso, l'opzione "Blocca blocco" era sufficiente, forse prova prima solo con questo
Donatello,

Buona risposta. Ho avuto un caso di "cecità nei dialoghi" con questo e non ho mai controllato le opzioni di pulizia. Storicamente, la 'navigazione verso il root e la pulizia' funzionava ma credo che rompere le serrature fosse sufficiente nel mio caso ..
Phil Cooper,

1
Ha funzionato anche per me!
Daniel Silva,

Non pensavo che i "blocchi di rottura" lo avrebbero fatto, perché non avevo fatto alcun blocco. Ma a quanto pare rompe i blocchi svn-internal che causavano questo problema. Grazie!
basher

Non ha funzionato per me 😦
Chimpanzee,

48

Un collega al lavoro vede costantemente questo messaggio, e per lui è perché ha eliminato una directory sotto il controllo versione SVN senza eliminarla da SVN, e quindi ha creato una nuova directory al suo posto non sotto controllo versione, con lo stesso nome.

Se questo è il tuo problema ...:

Esistono diversi modi per risolverlo, a seconda di come / perché la directory è stata sostituita.

In entrambi i casi, dovrai probabilmente:

A) Rinominare la directory esistente con un nome temporaneo

B) Eseguire un ripristino SVN per ripristinare la directory eliminata dal file system, ma non da SVN

Da lì, lo faresti neanche tu

A) Copia i file rilevanti nella directory che è stata eliminata

B) Se hai avuto un cambiamento significativo dei contenuti nella directory, esegui un'eliminazione SVN sull'originale, esegui il commit e rinomina la tua nuova directory con il nome desiderato, seguita da un'aggiunta SVN per ottenere quella sotto il controllo della versione.


1
Il tuo secondo passaggio B) mi sembra una pessima idea, in quanto spezzerebbe la cronologia delle revisioni per gli elementi della directory originale che sono conservati nella nuova versione.
Dunaril,

Le cose molto brutte accadevano quando la persona cancellava una directory versionata dal file system ma non da SVN. La risposta sopra potrebbe non essere un recupero perfetto, ma è un recupero.
Teemu Leisti,

34

Per me nessuna delle soluzioni di cui sopra ha funzionato. Ho trovato una soluzione rompendo le serrature. Quando ho eseguito svn cleanup, ho selezionato "Break Locks" insieme a "Clean up working copy status".

inserisci qui la descrizione dell'immagine


Per me ha rotto il blocco dal browser repository SVN di Tortoise. La rottura del blocco sulla cartella estratta non ha fatto nulla.
Bhargava Mummadireddy,

23

Questo ha funzionato per me.

  1. Vai alla cartella principale,
  2. Fare clic con il tasto destro e pulire
  3. Controlla tutte le opzioni disponibili
  4. Premere OK

Dopo la pulizia ti permetterà di aggiornare all'ultima versione.


2
Questo funziona anche per me. È necessario controllare tutte le opzioni disponibili (6 voci nella mia versione) per procedere alla Pulizia; non riesce se si seleziona semplicemente le opzioni [Pulisci stato copia di lavoro] e [Includi esterni].
Vincent Jia,

1
Questo ha funzionato totalmente per me ... semplicemente facendo clic con il tasto destro del mouse sul progetto> Team> Pulizia. Non è stato necessario rimuovere alcuna riga dall'SQL in .svn né altro. Proprio questo ha fatto il lavoro. Grazie!
msqar

Questo ha funzionato anche per me nella versione 1.7.4 di TortoiseSVN. Sono andato con le caselle di controllo predefinite che sono state presentate.
slm

Mi ha aiutato oggi, ma non avevo bisogno di controllare tutte le opzioni disponibili. Gli ultimi tre che hanno ripristinato le mie modifiche non l'ho verificato e ha funzionato comunque. Vedi anche stackoverflow.com/a/35192644/460775
EMBarbosa

1
Questo ha funzionato per me. Ho appena controllato Clean up working copy statused Breaks lockseInclude externals
Phiber

11

Per me, in realtà è stata colpa di Tortoise, in un certo senso. Tortoise si è appena lamentato "non è possibile ripulire, eseguire la pulizia", ​​ma quando ho eseguito la riga di comando (svn cleanup), mi ha chiaramente detto che non poteva eliminare alcuni file che erano in uso, la soluzione alla quale era ovvia. Una volta chiuso Visual Studio (che stava mantenendo i file aperti), la pulizia ha funzionato bene.

Altri programmi possono anche mantenere aperti i file nel repository causando questo problema. Excel con un xls aperto è stato un colpevole in un'altra istanza, quindi potrebbe essere saggio chiudere tutti i programmi che potrebbero utilizzare qualsiasi cosa nel repository o anche riavviare per forzare la chiusura dei programmi e quindi riprovare a ripulire.


7

Ho avuto questo problema perché le cartelle esterne non vogliono essere collegate in una cartella esistente. Se si aggiunge una riga di proprietà svn: externals in cui la destinazione è una cartella esistente (con versione o senza versione), verrà visualizzato l'errore bloccato SVN Woring Copy. Qui una pulizia ti dirà anche che tutto va bene, ma l'aggiornamento non funzionerà.

Soluzione: eliminare la cartella problematica dal repository ed eseguire un aggiornamento nella cartella principale in cui è impostata la proprietà svn: externals. Questo creerà la cartella e tutto andrà di nuovo bene.

Questo problema è sorto per me perché svn: externals per i file richiede che la cartella di destinazione sia controllata dalla versione. Dopo aver notato che questo non funziona su diversi repository, sono passato da file esterni a cartelle esterne e sono entrato in questo casino.


6

Il modo più semplice per farlo è mostrare le cartelle nascoste e quindi aprire la cartella .SVN. Dovresti vedere un file zero KB chiamato "lock" che elimina questo risolverà il problema


5

Ho riscontrato lo stesso identico problema utilizzando SVN 1.7 e nessuna delle correzioni sopra menzionate ha funzionato.

Prima di tutto, assicurati di eseguire il backup di tutto il contenuto modificato.

Dopo aver trascorso un paio d'ore (non ho scaricato di nuovo tutto in quanto il mio ramo ha dimensioni superiori a 6 GB), ho scoperto che esiste un file db chiamato "wc" nella cartella .svn del tuo ramo.

Apri il file db usando qualsiasi db manager (ho usato il plugin sqlite manager di firefox) e vai alla tabella WC_LOCK. Questa tabella contiene le voci per i blocchi acquisiti. Elimina i record dalla tabella e il gioco è fatto :)


anche se era praticamente un duplicato della risposta precedente, ti ho dato un voto perché hai menzionato il plug-in del gestore SQLite di Firefox.
ehambright,

3

Quando ho questo problema, trovo che l'esecuzione del comando cleanup direttamente sul percorso del problema generalmente funzioni. Quindi eseguirò nuovamente la pulizia dalla radice funzionante e si lamenterà di qualche altra directory. e ripeto solo fino a quando smette di lamentarsi.


1
Non sono riuscito a trovare un file di blocco come con le risposte precedenti, ma questo ha funzionato per me :)
serenskye,

3

Se utilizzi un computer Windows, visualizza il repository tramite un browser e potresti vedere due file con lo stesso nome ma usando casi diversi. Subversion fa distinzione tra maiuscole e minuscole e Windows no, quindi puoi ottenere un blocco quando Windows pensa che stia scaricando lo stesso file e Subversion no. Elimina i nomi dei file duplicati nel repository e riprova.


3

L'ho fatto semplicemente creando una nuova cartella, controllando il progetto, copiando i file aggiornati nella nuova cartella.

È stato risolto con un nuovo checkout.


Ho fatto lo stesso. (Ho messo la causa principale su AnkhSVN con la mia copia funzionante. AnkhSVN è ora disinstallato).
Scotty.NET,

2

Stai usando TortoiseSVN e hai appena aggiornato? Ho avuto questo problema prima di passare da 1.4 a 1.5 e non riavviare. (Prova a riavviare).

Il motivo per cui è necessario riavviare è perché il file della cache diventa tutto funky.

Altrimenti, per proseguire, esportare quella copia di lavoro in una nuova cartella (non copiare le cartelle nascoste .svn), ricontrollare il progetto e spostare nuovamente tutto il codice, quindi procedere con il commit.


Questo è successo anche a me, cioè ho solo bisogno di riavviare
Matthew Lock,

2

basta eliminare le cartelle .svn, quindi eseguire una pulizia nella directory principale. Funziona perfettamente !!


3
In SVN 1.7, questo non funzionerà perché c'è solo una cartella .svn, in alto. Se eliminato, l'allegato al repository viene rimosso.
AnneTheAgile,

2

Nelle versioni in Mac OS: Azione -> Pulizia blocchi di copia funzionanti su ...


2

Ricevo spesso un tale problema. Il mio modello che causa problemi di pulizia.

  1. Apro il file immagine nel visualizzatore.
  2. Elimina il file / la cartella di immagini.
  3. Sto provando a impegnare / aggiornare

La chiusura del visualizzatore di immagini in cui viene aperto il file eliminato risolve il problema. Forse altri software possono bloccare la pulizia allo stesso modo.

In generale. Credo che il riavvio del computer possa aiutare in questi casi.


1

SVN normalmente aggiorna la sua struttura interna (.svn / prop-base) dei file in una cartella prima che i file effettivi vengano recuperati dal repository. Una volta recuperati i file, questo verrà cancellato. Spesso l'errore viene generato perché "l'aggiornamento" non è riuscito o è stato annullato prematuramente durante l'avanzamento dell'aggiornamento.

  1. Verificare che i file siano elencati nella directory .svn / prop-base
  2. Rimuovere tutti i file che non si trovano nella cartella
  3. Pulire
  4. Aggiornare

Ora l'aggiornamento dovrebbe funzionare.


1

Ho avuto lo stesso problema perché ho esportato una cartella in una cartella controllata dalla versione. Ho dovuto eliminare la cartella da TortoiseSVN, quindi eliminare la cartella dal filesystem (a TortoiseSVN non piacciono le sottocartelle senzaversioni ... perché no ???)


Dovrei aggiungere che ho esportato una cartella NELLA STESSA CARTELLA .. questo è il modo in cui hai annullato la versione precedente. cartelle con versione.

1

Inizia la ricerca .... Blocca ... Seleziona tutti i file elencati ed elimina ... risolti


1

il seguente dovrebbe fare:

stato svn | grep ". L" | sed 's /.* (. *) $ / \ 1 /' | awk '{lunghezza della stampa ($ 1), $ 1}' | ordina -nr | awk '{print "pushd" $ 2 "; svn cleanup; popd"}' | sh


1

Non eliminare la tua soluzione!

nella cartella .svn hai un file chiamato lock che è lungo 0 byte

Puoi eliminare tutti questi file da tutte le cartelle .svn nella tua soluzione e funzionerà

Ha funzionato nel mio caso


Questa è la soluzione più semplice! Ha funzionato per me
Nathan,

Sì, sfortunatamente non funziona con l'ultima versione di SVN. Per l'ultima versione è necessario eliminarlo perché non è più presente un file di blocco. sembra che non ci siano più file, c'è un'intera struttura di cartelle completamente diversa. Se qualcuno sa se c'è qualcosa che può ancora essere modificato in un modo simile a quello sopra, si prega di condividerlo con noi.
Para,

1

Unversioning sul posto dei file e un nuovo checkout nella stessa posizione, ha risolto questo problema per me.

In TortoiseSVN, per eseguire un revisioning sul posto, trascinare a destra la cartella principale della copia di lavoro dall'elenco dei file su se stesso nella struttura della directory e selezionare "SVN Esporta elementi con versione qui" dal menu a comparsa. TortoiseSVN nota che la destinazione è la stessa della fonte e suggerisce di annullare la revisione della copia di lavoro.

Dopo aver annullato la revisione, esegui un nuovo checkout nella stessa cartella (che ora contiene una copia senzaversione di tutti i file che avevi). TortoiseSVN ti avvertirà che stai effettuando il checkout in una cartella esistente, ma puoi procedere.

Dopo questo, pulizie, aggiornamenti e altre operazioni hanno funzionato senza intoppi. Poiché entrambi i passaggi precedenti preservano le modifiche locali, non dovrebbe esserci alcuna perdita di informazioni (ma eseguire il backup della copia di lavoro prima di ciò può essere comunque una buona idea).

Un avvertimento: se la copia di lavoro contiene versioni miste o modifiche di proprietà senza commit, tali informazioni andranno perse. Per me, questo non è un evento comune e, data la scelta di una copia di lavoro corrotta o la perdita di modifiche di proprietà non impegnate, tendo a optare per quest'ultima.


1

Ho avuto questo problema in cui il "clean up" ha funzionato, ma l '"aggiornamento" avrebbe continuato a fallire. La soluzione che ha funzionato è stata quella di eliminare la cartella in questione tramite Windows Explorer, non l'eliminazione di TortoiseSVN (che segna la cancellazione come qualcosa da impegnare nel repository, e quindi ho fatto un "checkout" per essenzialmente "aggiornare" la cartella dal repository.

Maggiori informazioni sulla differenza tra un'eliminazione O / S e un'eliminazione SVN qui: http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-rename.html

In particolare:

Quando TortoiseSVN → Elimina un file, questo viene rimosso immediatamente dalla copia di lavoro e viene contrassegnato per l'eliminazione nel repository al successivo commit.

E:

Se un file viene eliminato tramite Explorer anziché utilizzare il menu di scelta rapida TortoiseSVN, la finestra di dialogo di commit mostra quei file e consente di rimuoverli dal controllo versione anche prima del commit. Tuttavia, se aggiorni la tua copia di lavoro, Subversion individuerà il file mancante e lo sostituirà con l'ultima versione dal repository.


1

Se sei su Linux, prova questo:

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

Quindi eseguire il cleanupcomando su quella directory, quindi provare ad aggiornare.


1

Ho fatto quanto segue per risolvere il mio problema:

  1. Rinominata la cartella offensiva posizionando un "_" davanti al nome della cartella.
  2. Ha fatto un "Clean Up" della cartella principale.
  3. Rinominata la cartella incriminata con il nome originale.
  4. Ha fatto un commit.

1

In Esplora soluzioni, fai clic con il pulsante destro del mouse sul progetto, nel sottomenu di apertura fai clic su sovversione e seleziona clean-up. Risolverà il problema, come ha fatto per me. Spero che funzioni.


1

Per fare la pulizia

  1. Elimina la cartella .svn.

  2. Esegui svncheckout nella cartella principale.

  3. Prova a eseguire l'operazione di pulizia.

Questo ha risolto il mio problema.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.