Io le cose di test le metto in progetti appositi in cui faccio tutte le porcherie che voglio, mentre le cose diverse tra client e server possono essere i file di configurazione (che bisogna tracciare in qualche modo se vengono aggiunti parametri, ma senza perdersi le personalizzazioni... argh!). E la rifattorizzazione sarebbe proprio il punto in cui il versioning (con branching efficente) serve, senza bisogno di tenere una copia di un sorgente 
Comunque voglio specificare che non sto cercando di fare il saputello con Id, alla cui sapienza m'inchino e sempre m'inchinerò
.
Probabilmente io ho passato quasi più tempo a studiare gli strumenti per programmare e a creare librerie e utilities (infatti sono il consulente fisso quando qualcosa non funziona
) che a programmare veramente o creare cose frontend, perciò bado molto alla forma dei "processi produttivi".
Massi', dai, siam qui a parlare. Confrontare opinioni ed esperienze diverse e' l'intero senso della questione, nessuno pensa di darti del saputello

Per il resto, hai ragione: il refactoring e il porting sono le due cose per le quali generalmente versioning e branching efficienti sono capitali.
Poi dipende: se devo fare refactoring di una parte molto piccola - una giornata o due, non di piu', non sto a fare un branch apposta di tutto quanto il progetto, faccio prima a tenermi una copia del file in locale e bon.
E' che poi sono disordinato e non la cancello, che e' un mio difetto ma ho imparato a conviverci e quindi tipicamente me ne fotto e quel file rimane li'
Un'altra buona ragione e' che IMO il branching di SVN fa cagare e dove lavoro usiamo quello
Le cose di test mi piacerebbe farle, solo che sono sempre in produzione e non ho il tempo. "Fare o non fare, non c'e' provare"