Trunk ist der Hauptzweig der Entwicklung. Normal baut man hier neue Features usw. die nicht für die Produktion geeignet sind und viele Fehler haben können.
Branches enthält parallele Entwicklungen zum Trunk oder anderen Branches. Stelle es dir als Baum vor. Parallele Entwicklung kann z.B. für Releases verwendet werden. Man zweigt vom Trunk die Entwicklung ab, weil man sagt, dass nun die komplettierten Features nun getestet und verbessert werden sollen. Nach dem Release kann mann dann dort auch noch Fehler beheben.
Hat man mehrere Kunden für dasselbe Produkt mit jedoch leicht unterschiedlichen Konfigurationen, kann man so jeden Kunden mit seinem massgeschneiderten Produkt beliefern, während im Trunk neue Features entstehen.
Tags enthalten Schnappschüsse vom Trunk, Branches oder Teilen davon. Sie sind im Gegensatz zu Branches fix und können/dürfen nicht verändert werden. Es sind einfach Zustandssituationen zu bestimmten Versionen.
SVN vergibt zwar für jede Änderung eine eindeutige Revision, d.h. man bräuchte Tags garnicht, jedoch kann man Tags mit Namen benennen.
In
SVN ist es (leider) möglich, auch Tags weiter zu verändern und somit als Branch zu missbrauchen.