I tillegg til å arkivere innholdet av filene, holder Subversion også orden på trestrukturer. Dette er en av hovedgrunnene til at Subversion ble skrevet for å erstatte CVS.
Her er hva dette har å si for deg, som en tidligere CVS-bruker:
Kommandoene svn add og svn delete virker nå også på kataloger, akkurat som de gjør på filer. Det samme gjelder svn copy og svn move. Disse kommandoene forårsaker imidlertid ingen øyeblikkelige forandringer i depotet. Istedenfor blir de elementene det gjelder “lagt i kø” for tillegging eller sletting. Det vil ikke bli gjort noen forandringer i depotet før du kjører svn commit.
Kataloger er ikke “dumme” lagringsplasser for
filer mer, de har revisjonsnumre i likhet med filer.
(Eller riktigere beskrevet, det er korrekt å snakke om
“katalogen foo/ i revisjon
5”.
La oss snakke mer om det siste punktet. Versjonskontroll av kataloger er et vanskelig problem. Fordi vi ønsker å tillate kopier som inneholder blandede revisjoner, er det lagt inn begrensninger i hvor langt vi kan gå når det gjelder å misbruke denne modellen.
Fra et teoretisk synspunkt definerer vi “revisjon 5 av
katalogen foo” til å bety en spesifikk
samling av katalogposter og egenskaper.
Tenk deg så at vi begynner å legge til og fjerne filer fra
foo, og deretter legger det inn.
Det ville være løgn å si at vi fortsatt har revisjon 5 av
foo.
Imidlertid, hvis vi øker revisjonsnummeret for
foo etter innleggingen, ville det også være
en løgn;
det kan være andre forandringer i foo som vi
foreløpig ikke har mottatt, fordi vi ikke har oppdatert
enda.
Subversion tar seg av dette problemet ved å i all stillhet
undersøke innlagte tillegginger og slettinger i
.svn, det sjekkes at alt er i orden i henhold
til depotet, og det nye revisjonsnummeret blir korrekt satt for
katalogen.
Derfor, det er kun etter en oppdatering det er helt
sikkert å si at du har en “perfekt” revisjon av en
katalog.
Mesteparten av tiden vil arbeidskopien din inneholde
“uperfekte” katalogrevisjoner.
På samme måte vil et problem oppstå hvis du forsøker å legge inn forandringer i egenskapene for en katalog. Normalt ville innleggingen øke det lokale revisjonsnummeret for arbeidskatalogen. Men også her ville det være en løgn, fordi det kan være tillegg og slettinger som katalogen fortsatt ikke har, fordi ingen oppdatering er gjort. Derfor får du ikke lov til å legge inn egenskapsforandringer på en katalog hvis den ikke er oppdatert.
For videre diskusjon om begrensningene på versjonskontroll for kataloger, se “Arbeidskopier med blandede revisjonsnumre”.