TFS? Corri per le colline! Spegni il più velocemente possibile. Fa molte cose diverse ma nessuna è valida come i migliori strumenti disponibili per la razza.
Ma sul serio:
Una volta che hai un sistema di controllo della versione decente (SVN, GIT, ecc.) ti consigliamo di impostare le regole per la gestione delle filiali, ad es. quando creare rami, per cosa, quando unire, chi e molto altro.
Fino a poco tempo fa abbiamo utilizzato un singolo ramo per il nuovo sviluppo ('trunk'). Per un rilascio creeremmo un ramo fuori dal tronco. Il QA finale verrebbe fatto in quella filiale e una volta completato pubblicheremmo (siamo su versioni mensili).
Siamo passati al concetto di "no junk nel bagagliaio" per ridurre il rischio di pianificazione. Questo concetto contiene fondamentalmente una regola in base alla quale è necessario creare rami per il lavoro di sviluppo separato dal trunk. Ad esempio potresti avere un ramo separato per una funzionalità, per un piccolo team di sviluppo o simili. Utilizziamo "epopee" per descrivere una piccola funzione o parte rilasciabile di una funzione e creare un ramo per ogni epopea. Almeno una volta al giorno tutte le modifiche dal tronco vengono unite nel ramo epico. La chiave è un buon supporto per il controllo delle versioni o uno strumento separato (ad esempio unione a tre vie). Il QA per l'epico sarebbe stato fatto sul ramo epico. Una volta passato, il ramo epico verrebbe unito al tronco e verrà eseguito un test di integrazione. Abbiamo ancora filiali per le versioni.
Con i rami epici abbiamo ridotto sostanzialmente il rischio di pianificazione, poiché ora siamo in grado di rilasciare il bagagliaio e includere tutti i file epici che sono stati uniti con successo nel trunk. Le poesie che non sono complete perdono il bus e faranno la prossima uscita (il prossimo mese).
Questo naturalmente può funzionare solo nel nostro ambiente. Molto probabilmente avrai fattori diversi dai nostri che influenzeranno le scelte migliori per la gestione delle filiali.
Ad esempio, se si dispone di un team con molte persone che lavorano in remoto e che non sono sempre connesse al server di controllo versioni, è consigliabile utilizzare un sistema di controllo versione che supporti un modello distribuito. GIT e pochi altri rientrerebbero in questa categoria. TFS, per quanto ne so, richiede una connessione al server per rendere i file scrivibili (risolti nella versione 2010?).
Spero di essere stato in grado di dimostrare che non esiste "taglia unica". Inizia con i tuoi processi in particolare la gestione delle filiali, determina i requisiti e, infine, seleziona lo strumento più adatto alle tue esigenze. Forse è TFS, forse no.