Avrai "trunk", ora chiamato "master", avrai "rami" ora chiamati "teste" e avrai "tag", ancora chiamati "tag", ma loro non saranno cartelle , saranno "ref", etichette alle revisioni che vivono in uno spazio dei nomi separato all'interno del repository.
Subversion e Git hanno diversi modi di fare branching. Il modello di subversion di base è quello di avere un albero di directory con un'unica timeline globale e se si desidera diramazione, si copia una sottostruttura in un'altra directory.
D'altra parte Git ha un albero di directory con revisioni che ciascuno definisce i suoi genitori, ma ogni revisione può avere più genitori (un'unione) e più figli (rami). Quindi, invece di avere le directory per le filiali, ottieni revisioni create in modo indipendente. I "ref" sono solo nomi associati all'ultima revisione per "ramo" dato.
Questa differenza è fondamentale per il controllo della versione distribuita. Git (e altri sistemi distribuiti) non ha alcuna autorità centrale per mantenere lineare la cronologia, quindi è possibile creare revisioni in modo indipendente su più repository senza conoscersi l'un l'altro e il sistema deve adattarli. Si scopre che la generalizzazione rende molto più semplice la ramificazione e la fusione in generale.
Nota che in Git le revisioni non sono su alcun ramo. Sono solo e rami li contengono. Ma una volta che il ramo è fuso, o si rivela un vicolo cieco, puoi semplicemente eliminare il "ref" puntandolo ad esso e dimenticarlo del tutto (se scarti vecchi processi, saranno raccolti con il garbage alla fine con git gc
). Questo ti aiuta a evitare di essere sommersi da vecchi esperimenti nessuno ricorda più di cosa si trattasse.