Sviluppare software in modo professionale richiede un sistema di versionamento, che consenta editing collaborativo, revisioni, possibilità di gestire branch ed integrazione con un sistema di issue tracking. A ELbuild abbiamo scelto Subversion, un sistema che non ha bisogno di presentazioni in quanto costituisce un riferimento per migliaia di aziende nel mondo.
A volte, utilizzare client eterogenei sulla stessa copia locale, ad esempio quelli integrati dentro gli IDE come Netbeans, o le windows shell extension come Tortoise SVN, può provocare blocchi di una working copy locale, blocchi non risolvibili tramite il comando svn cleanup.
La manifestazione di questo problema di solito consiste in un messaggio come quello sotto:
svn: Working copy 'trunk' locked svn: run 'svn cleanup' to remove locks (type 'svn help cleanup' for details) ladamo@cody:~/Development/projects/MTWSN$ svn cleanup svn: In directory '…..' svn: Error processing command 'modify-wcprop' in '….'
Anche utilizzando il comando status di svn, il path interessato risulta chiaramente ancora in stato locked.
ladamo@cody:~/Development/projects/MTWSN$ svn st ! L . ! L trunk ! L trunk/....
Questo è dovuto all’impossibilità di cancellare i file lock presenti dentro le cartelle .svn (valido fino alla versione 1.6 di Subversion, nelle versioni a partire dalla 1.7 la struttura dei metadati necessari alla gestione della copia locale è cambiata).
Per ovviare al problema, e rendere la working copy nuovamente utilizzabile per le operazioni di commit e update è possibile rimuovere manualmente i lock file. Questo chiaramente invaliderà eventuali operazioni di lock fatte correttamente da terzi sviluppatori che stanno agendo sullo stesso file.
Se si è certi che questo non sia il nostro caso, è possibile utilizzare il seguente comando, eseguito a partire dalla cartella principale della working copy:
find . -name lock | xargs -n1 rm -f
A questo punto è nuovamente possibile utilizzare la working copy, sia a partire da shell, che tramite client integrati in IDE (Netbeans, Eclipse, etc).