Bytte om en arbeidskopi

Kommandoen svn switch flytter en eksisterende arbeidskopi til en annen gren. Selv om denne kommandoen strengt tatt ikke er nødvendig for å arbeide med forgreninger, gir den en fin snarvei for brukere, I det tidligere eksempelet vårt, etter at du opprettet en privat gren, hentet du ut en fersk arbeidskopi av den nye katalogen i depotet. Istedenfor kan du rett og slett be Subversion om å forandre arbeidskopien din av /calc/trunk til å avspeile plasseringen til den nye grenen:

$ cd calc

$ svn info | grep Nettadresse
Nettadresse: http://svn.example.com/repos/calc/trunk

$ svn switch http://svn.example.com/repos/calc/branches/my-calc-branch
U   integer.c
U   button.c
U   Makefile
Oppdatert til revisjon 341.

$ svn info | grep Nettadresse
Nettadresse: http://svn.example.com/repos/calc/branches/my-calc-branch

Etter å ha byttet om til grenen, er ikke arbeidskopien mer forskjellig enn om du hadde gjort en fersk uthenting av katalogen. Og det er vanligvis mer praktisk å bruke denne kommandoen, fordi forskjellene mellom grener ofte er ganske små. Serveren sender bare et minimalt sett med forandringer nødvendig for å avspeile grenkatalogen.

svn switch-kommandoen tar også et --revision (-r)-valg, så du trenger ikke alltid å flytte arbeidskopien din til tuppen av grenen.

Selvfølgelig, de fleste prosjekter er mer kompliserte enn calc-eksempelet vårt, og inneholder flere underkataloger. Subversionbrukere følger ofte en spesiell algoritme ved bruk av grener:

  1. Kopier hele trunk fra prosjektet til en ny grenkatalog.

  2. Bytt bare om en del av trunk-arbeidskopien for å avspeile forgreningen.

Med andre ord, hvis en bruker vet at grenarbeidet kun trenger å skje i en spesiell underkatalog, bruker de svn switch for å flytte bare denne underkatalogen til grenen. (Og noen ganger vil brukere bare bytte om en enkelt arbeidsfil til grenen!) På denne måten kan de fortsette å motta normale oppdateringer fra trunk til mesteparten av arbeidskopien deres, men de ombyttede delene vil forbli immune (unntatt hvis noen legger inn en forandring til denne grenen). Denne funksjonaliteten legger til en hel ny dimensjon til konseptet med en blandet arbeidskopi – ikke bare kan arbeidskopier inneholde en blanding av av arbeidsrevisjoner, men også en blanding av depotbeliggenheter.

Hvis arbeidskopien din inneholder et antall ombyttede katalogtrær fra forskjellige depotplasseringer, fortsetter den å virke som normalt. Når du oppdaterer, vil du motta patcher til hvert undertre der det er nødvendig. Når du legger inn forandringer, vil dine lokale forandringer fortsatt bli lagt inn som en enkel, atomisk forandring til depotet.

Legg merke til at mens det er greit for arbeidskopien din å avspeile en blanding av depotplasseringer, må alle disse plasseringene være innenfor det samme depotet. Subversiondepoter er foreløpig ikke i stand til å kommunisere med hverandre; det er en funksjonalitet som er planlagt etter Subversion 1.0.[25]

Fordi svn switch egentlig er en variant av svn update oppfører den seg på samme måte; alle lokale modifiseringer i arbeidskopen blir tatt vare på når nye data ankommer fra depotet. Dette lar deg gjøre alle mulige lure triks.

For eksempel, tenk deg at du har en arbeidskopi av /calc/trunk og gjør et antall forandringer i den. Så finner du plutselig ut at du skulle gjøre disse forandringene på en gren istedenfor. Ikke noe problem! Når du bruker svn switch for å flytte arbeidskopien til grenen, vil de lokale forandringene bli værende. Du kan deretter teste og legge dem inn på grenen.



[25] Du kan imidlertid bruke svn switch med --relocate-valget hvis URL-en til serveren forandrer seg og du ikke vil forkaste en eksisterende arbeidskopi. Se svn switch-seksjonen i Kapittel 9, Subversion Complete Reference for mer informasjon og et eksempel.