# Subversion

Subversion, CVS bezala, softwarearen bertsioak kontrolatzen dituen aplikazioa da, eta espresoki hau ordezkatzeko sortu zen. CVSk hutsuneak zituenez, hauek konpontzeko garatu zen. SVN edo svn izenarekin ere ezagutzen da, izen hau erabiltzen baita komando lerrotik. CollabNetek sortu zuen, zeinak oraindik mantentzen jarraitzen duen. CVS bezala software librea da, Apache/BSD lizentziapean banatzen da.
Subversionen ezaugarri garrantzitsuenetako bat, CVSn gertatzen ez zen bezala, artxibo bakoitzak ez duela berrikuspen zenbaki desberdin bat, hau da, proiektuko fitxategi guztiek bertsio zenbaki bakarra konpartitzen dute eta momentu bakoitzeko fitxategi multzoari buruzko informazioa eman dezake.

## Historia

Subversion 2000. urtean sortu zen dohaineko bertsioen kontrolerako sistema bat garatzeko. CVSren ideia mantentzen zuen baina baina zenbait akats konpontzeko eta ezaugarri gehiago ezartzeko intentzioarekin garatu zuten. 2001 urterako garatzaileak gai ziren beraiek sortutako kodea Subversionen bertan gordetzeko.

## Ezaugarriak

Bere erabilera nagusia proiektu bateko fitxategiak biltegi bakar batean izatea da, fitxategien aldaketa guztiak dokumentatuta izanik. Biltegi guztiak bertsio zenbaki bakar bat du eta dokumentuetan egindako aldaketak atzera ekarri daitezke. Fitxategi bakoitzeko besteak beste sorrera ordua, aldaketa ordua, egilea eta aldaketaren azalpena gordetzen dira. Gehien bat software ingurunetan erabiltzen da, iturburu kodea antolatuta izateko edota web orriak maneiatzeko.
Segidan bestelako ezaugarriak zerrendatzen dira:
* Bezero-zerbitzari arkitektura erabiltzen du, CVSk bezala: zerbitzari batek proiektuaren momentuko fitxategi guztien bertsioak gordetzen ditu.
* Egiten diren aldaketa guztiak atomikoak dira. Zerbitzaria ez da inoiz egoera ezegonkorrean gelditzen.
* Hostoak eta etiketak sortzea modu eraginkorragoan burutzen da. O(1)-eko eragiketa da eta CVS-n O(n)-koa zen.
* Bezero-zerbitzari bi norantzetan fitxategien desberdintasunak bakarrik bidaltzen dira, ez CVS-n gertatzen zen bezala (bezerotik zerbitzarira fitxategi osoak bidaltzen ziren).
* Apache bitartez zerbitzatu daiteke, WebDAV/DeltaV bitartez. Honek ahalbidetzen du Subversion modu gardenean egikaritzea WebDAV bitartez.
* Fitxategi bitarrak modu eraginkorragoan tratatzen ditu. (CVSk barnetik fitxategi hauek testua balira bezala tratatzen baitzituen).
* Fitxategi batzuk blokeatu ditzake. Batzuetan, ez da komeni fitxategi bera bi garatzailek batera aldatu ahal izatea.

### Biltegi motak

Subversioneko fitxategiak gordetzeko bi biltegi mota eskaintzen ditu: FSFS eta Berkeley DB. FSFSk azkarrago lan egiten du fitxategi kopuru handiekin eta disko espazio txikiagoa hartzen du, log gutxiago sortzearen truk. Berkeley DBren gainean lan egiten duenean muga batzuk ditu Subversionek, arazoak sortu daitezke datu basea erabiltzen ari den aplikazio baten huts egiten duenean edo indarrez akatzen denean. Berkeley DB biltegiak erabiltzeko modu seguru bakarra zerbitzari dedikatu bat erabiltzea da, erabiltzaile bakarrarekin, Version Control with Subversionen arabera. Berkeley DBrekin biltegia berreskuratzeko dauden tresnak ez daude oraindik oso garatuak, eta beraz, sarri biltegiaren segurtasun kopiak egin behar dira.

### Biltegietarako atzipena

1.4 bertsiotik aurrera Subversioneko biltegiak ondorengo eratara atzitu daitezke:
* Ordenagailuko fitxategi sisteman edo sareko fitxategi sisteman erabiltzaileak zuzenean atzitu ditzake biltegiak. Modu honek file:///path bide motak erabiltzen ditu.
* WebDAV/DeltaV (http edo https gainean) Apache 2rako mod_dav_svn modulua erabiliz. Modu honek https://host/path bide mota erabiltzen du.
* Moldatutako "svn" protokoloa (lehenetsitako 3690 portuarekin), testu hutsa sshren gainean erabiliz. Modu honek svn://host/path bide mota erabiltzen du zifratu gabeko atzipenerako edo svn+ssh://host/path%5B%5D bide mota ssh tunel baten bidez atzitzeko.
3 moduak FSFS eta Berkeley DB biltegiekin erabil daitezke.
Subversioneko bezeroek 1.5 bertsiotik aurrera WebDAV/DeltaV (http edo httpsren gainean) atzipena dute, subversion 1.4 edo berriago bat duten zerbitzariekin.

## Geruzak

Subversion barnetik liburutegi desberdinez osatuta dago, zeintzuk geruzatan banatzen diren.

### Fs

    Beheko maila. Bertan inplementatzen da bertsionatutako fitxategiak, bezeroaren informazioa gordeko duena.

### Repos

    Fitxategien inguruan osatutako repositorioa.

### mod_dav_svn

    apache 2 bitartez WebDAV/DeltaV atzipena.

### Ra

    repositorioetarako atzipena ematen du. Puntu honetatik aurrera repositorioak URL bezala atzitu daitezke. Adib.: file:///path/

### Client, Wc

    Goreneko maila. Repositorio geruzaren abstrakzio bat egiten du eta erabiltzaileari zuzeneko atzipena ematen dio. Hala nola, kautotzea, edota bertsioen alderaketa. Wc liburutegia bezeroak erabiltzen du proiektu lokal batean lan egiten badu.

## Fitxategi sistema

Subversionek erabiltzen duen fitxategi sistema “hiru dimentsiotako” fitxategi sistema bezala definitu daiteke. Fitxategi sistema arruntak zuhaitz bezala adierazi izan ohi dira. Subversionek hau ere erabiltzen du baina berrikuspen bakoitzak bere erro propioa du. Erro hau berrikuspen horretako edukiak atzitzeko oinarritzat erabiltzen da.
Fitxategiak lotura bezala gordetzen dira, egin den azkeneko aldaketara, horregatik dira Subversioneko repositorioak hain txikiak. Fitxategiak gordetzeko erabilitako lekua egindako aldaketekiko proportzionala da, ez egindako aldaketa kopuruarekiko.
Subversion fitxategi sistemak transakzioak erabiltzen ditu, aldaketak atomikoak izan daitezen. Aldaketak berrikuspen batetik abiatzen dira, ez nahitaez azkenekotik. Transakzioak bere erro propioa du, zainetan aldaketak egingo dituen. Transakzioa bukatu eta onartzen da, azkeneko berrikuspenean bihurtuz, edo egindako aldaketa guztiak bertan behera geratzen dira.

## Bezeroak

Subversion erabiltzeko hainbat interfaze daude, batzuk espreski sortuak eta beste batzuk garapen inguruneetan integratuta. Jarraian garrantzitsuenak aipatuko ditugu:
* TortoiseSVN. Windows Explorer-arekin elkarrekintza ahalbidetzen du. Windows munduan interfaze hau da ezagunena.
* Subclipse. Eclipse ingurunean integratzen duen plugina.
* Subversive. Eclipserako beste puglin bat.
* ViewVC. Web interfazea, CVS-rekin ere lan egin dezakeena.
* Mac OS X sistema eragilerako SvnX, RapidSVN eta Zigversion inguruneak existitzen dira.

## Eragozpenak

Fitxategi bat mugitu (edo berrizendatu) behar denean ez da eragiketa atomikoa, kopiatze eta ezabatze eragiketez osatzen da.
Adabakiak behin eta berriz jartzean adarren artean jartzean arazoak sor daitezke, ezin da atzera joan eta zein aldaketa egin diren kontsultatu. Arazo hau ekidin daiteke commit aginduekin kontu izaten eta hurrengo bertsioan konponduko da (1.5).

## Kanpo estekak

* Datuak: Q46794
* Multimedia: Apache Subversion / Q46794
* ↑ "Subversion's History", section of Version Control with Subversion, version 1.4
* ↑ Strategies for Repository Deployment
* ↑ Ben Collins-Sussman, Brian W. Fitzpatrick, C. Michael Pilato. SVN Documentation Chapter 5. O'Reilly.
* ↑ Berkeley DB fitxategi blokeaketa erabiltzen du eta litzateke sareko fitxategi sistemetan erabili beharko, ez dagoelako inplementatuta