Problemi durante lo spostamento di cartelle con SmartSVN
Come già specificato in un precedente post, SmartSVN è la nostra scelta per quanto riguarda un client grafico per Subversion, il sistema di controllo della versione. In questo articolo approfondiamo un problemino legato allo spostamento delle cartelle della nostra copia di lavoro.
Nota: perchè l’articolo abbia senso, è consigliabile che abbiate già familiarità con i concetti base di SVN. Se ne volete sapere di più, potreste cominciare da questo articolo.
Interazione con il file system
Dall’interno del programma SmartSVN, si può ovviamente gestire completamente la nostra copia di lavoro: creare, rinominare, spostare e cancellare file e cartelle. E’ molto comodo, però, quando il client SVN si integra con il file system a un livello tale che:
- troviamo le operazioni fondamentali anche nei menù contestuali dei file;
- il client si accorge delle operazioni effettuate a livello di filesystem (copie e spostamenti) e le traduce nelle relative operazioni SVN.
Ad esempio, una delle funzionalità più utili è il fatto che, in fase di commit, SmartSVN si accorge se un file è stato aggiunto / spostato / rinominato. Cerca infatti di rilevare automaticamente questo tipo di modifiche e ce le propone per approvazione prima di inviarle al server.
In questo modo, l’utilizzo di SmartSVN si limita alle operazioni di commit e update, mentre per il resto lavoriamo normalmente sulla nostra copia di lavoro come su qualunque altra cartella del nostro computer.
Spostamento di file e cartelle
In particolare, la rilevazione dello spostamento di un file crea il relativo comando move: così il file mantiene, seppur rinominato, tutta la storia delle versioni acquisita sin qui.
Il problema è che questa rilevazione automatica non si applica invece alle cartelle. Quando spostiamo una cartella direttamente da file system, la cartella della posiziona originale viene rimossa dal repository in quanto mancante, mentre la cartella nella nuova posizione stessa risulta per SmartSVN “fuori posto”, come se appartenesse a una diversa working copy, e quindi non viene aggiunta.
Questo tipo di cartella viene posta da SmartSVN nello stato foreign working copy.
La soluzione non è difficile: infatti selezionando la cartella e applicando il comando “fix” (visibile nella barra degli strumenti) possiamo eliminare l’anomalia in due modi:
- segnandola come “spostata” (in pratica applichiamo a posteriori il comando MOVE)
- rimuovendo le informazioni di SVN, e riconsiderandola come una cartella nuova (per cui verrà aggiunta al prossimo commit)
Soluzione definitiva
Tuttavia, il problema è che a volte non ci accorgiamo della presenza di questo tipo di anomalia finchè qualcuno non ci segnala che gli manca un pezzo del progetto, che noi invece vediamo regolarmente. Per evitare quindi del tutto che si verifichi questa situazione, in attesa di una ulteriore evoluzione di SmartSVN, abbiamo due opzioni:
- Spostare le cartelle usando il comando MOVE dall’interno di SmartSVN
- Invece che spostare una cartella, creare la nuova, spostare il contenuto, e cancellare la vecchia