I progetti software hanno quasi sempre uno o più file di configurazione che sono personalizzati in base al contesto. Ogni sviluppatore può avere un file di configurazione personale e anche i server di test e di produzione ne hanno uno creato apposta.
Avendo un sistema di repository, come Subversion (aka: SNV), i file di configurazione sono gestiti come normali file e quindi inviati nella fase di commit. Ogni contesto (copia di lavoro o server) ha una sua personalizzazione del file che verrebbe sovrascritta dall’ultimo commit effettuato. Questo è un problema comune in quanto le configurazioni sono continuamente riscritte e sovrascritte, dovendo essere corrette ogni qual volta che si aggiorna il codice, il che comporta parecchio lavoro in più.
Si può risolvere il problema utilizzando l’opzione svn:ignore di SVN che permette di ignorare i file indicati, in questo caso i file di configurazione. Per mantenere comunque una base dei file ignorati è sufficiente creare dei i file di configurazione generici aggiungendo un’estensione alla fine.
Nel caso di esempio, in cui ho un file di nome config.ini, creo una copia con:
svn mv config.ini config.ini.tmpl
Con questo comando ho rinominato il file mantenendone intatta la storia delle precedenti revisioni. Ho scelto di aggiungere l’estensione tmpl per indicare che il file è un template (o modello) dell’originale, ma ognuno può utilizzare l’estensione o il nome che preferisce.
Per ignorare il file mi sposto all’interno della directory dove risiede e lancio il seguente comando:
svn propedit svn:ignore .
Questo comando mi permette di modificare la lista dei file da ignorare per la directory in cui mi trovo ( . ). Una volta eseguito il comando si apre l’editor di testo in cui si possono inserire i nomi dei file, uno per riga. E’ anche possibile usare i caratteri wildcard, come gli asterischi, per indicare contemporaneamente più file.
Una volta fatto posso inviare le modifiche:
svn ci -m"Da ora in poi potete usare i vostri file di configurazione senza rischi!"svn up
Da questo punto in poi il file config.ini è ignorato e posso procedere con il mio lavoro: creo una semplice copia del file di template config.ini.tmpl (senza usare SVN!) dandogli il nome config.ini e lo modifico secondo i miei bisogni. Al prossimo aggiornamento il file config.ini non sarà toccato e tutti i miei collaboratori potranno avere i loro file di configurazione senza creare problemi agli altri.
Nel caso in cui si debbano inserire delle modifiche utili a tutti gli sviluppatori è sufficiente modificare il solo template e ricreare il proprio file di configurazione personalizzato.
Il sistema funziona anche con link e directory aprendo la strada a diverse possibilità.