Subversion hoidla kasutamine operatsioonisüsteemiga Debian Squeeze

Allikas: Imre kasutab arvutit
Redaktsioon seisuga 15. oktoober 2026, kell 18:37 kasutajalt Imre (arutelu | kaastöö) (Uus lehekülg: '===Sissejuhatus=== Subversion http://subversion.tigris.org/ on versioonihalduse tarkvara (ingl. k. version control system), mida algselt asus arendama Collabnet http://www.collab.net/, tänapäeval on Subversion nn vaba tarkvara projekt. Subversion tarkvara kasutamine toimub Apache litsentsi http://en.wikipedia.org/wiki/Apache_License alusel. Üldiselt kasutatakse versioonikontrolli tarkvara selleks, et hõlbustada mingi tekstilist tulemust tekitava ülesandega tegelevate...')
(erin) ←Vanem redaktsioon | Viimane redaktsiooni (erin) | Uuem redaktsioon→ (erin)
Mine navigeerimisribaleMine otsikasti

Sissejuhatus

Subversion http://subversion.tigris.org/ on versioonihalduse tarkvara (ingl. k. version control system), mida algselt asus arendama Collabnet http://www.collab.net/, tänapäeval on Subversion nn vaba tarkvara projekt. Subversion tarkvara kasutamine toimub Apache litsentsi http://en.wikipedia.org/wiki/Apache_License alusel.

Üldiselt kasutatakse versioonikontrolli tarkvara selleks, et hõlbustada mingi tekstilist tulemust tekitava ülesandega tegelevatel osalistel, nt programmeerijatel, üksteise tegevusest osa saada ja koostööd teha. Samal ajal ei ole versioonikontroll iseenesest projektijuhtimise tarkvara.

Tavaliselt kasutavad kõik osalised ühte keskset versioonihalduse serveris asuvat repositooriumit, kus asuvad kõneksolevale projektile vastavad andmed ning iga kasutaja töökohaarvutis on keskse projekti või selle osa koopia, mida nimetatakse kasutaja tööversiooniks. Kasutajad teevad muudatusi oma tööversiooni ning sünkroniseerivad andmeid keskse repositooriumiga. Sellise sünkroniseerimise käigus kopeerivad kasutajad oma tööversiooni tehtud muudatused versioonihalduse repositooriumisse ning saavad osa teiste kasutajate poolt tehtud muudatustest eeldusel, et teised kasutajad on oma muudatused eelnevalt repositooriumisse kopeerinud. Andmevahetus toimub ainult kasutaja ja repositooriumi vahel, mitte kunagi otse kahe kasutaja tööversioonide vahel.

Käesolev tekst keskendub Subversionit kasutava versioonihalduse süsteemi käivitamisel, eriti repositooriumi ettevalmistamisel ja seetõttu pakub tõenäoliselt huvi pigem süsteemiadministraatorile kui versioonihalduse süsteemi lõppkasutajale. Lõppkasutajale sobivamaks on tõenäoliselt versioonihalduse kliendi kasutamist käsitlev tekst, nt TortoiseSVN.

Subversioni arhitektuur

Subversioni ehitust kujutab kõrgel abstraktsioonitasemel selline skeem

  SVN käsureaklient                  GUI SVN kliendid
               \                        /
  ------------------------------------------------- kliendi teekide liides
                   \                /
                     kliendi teegid
                           '
                           v
                hoidlale ligipääsumoodused
             DAV           SVN           Local
              |             |              |
            võrk (nt  internet)            |
              |             |              |
              |             |              |
              v             v              |
                                           |
  Apache veebiserver    svnserve           |
              '             '              |
  ------------------------------------------------- hoidla liides
              |             |              |
              v             v              v
                   Subversion hoidla
                   /               \
                 '                   '
            Berkeley DB              FSFS

kus on esitatud

  • skeemi ülaosas on kujutatud Subversioni klientprogramme, mis standadsete teekide kaudu suhtlevad hoidlaga kasutades kolme nö ühenduskanali võimalust, 1. DAV läbi Apache veebiserver, 2. SVN üle svnserve serveri ning 3. otse failisüsteemi kaudu, eeldusel, et klienti saab kasutada hoidlaga samas arvutis
  • DAV ja SVN andmevahetus toimub üle avaliku võrgu kasutades TCP protokolli
  • Subversioni hoidla võib esineda oma sisemise andmesalvestusformaadi mõttes kahel kujul, Berkeley DB või FSFS, vaikimisi kasutatakse viimast

Subversion tarkvara paigaldamine

Debian v. 6.0 Squeeze sisaldab paketihalduses Subversion versioonikontrolli tarkvara v. 1.6.12, paigaldamiseks tuleb öelda

 # apt-get install subversion

Pakett subversion sisaldab

  • svn - Subversioni klient suhtlemiseks hoidlaga
  • svnadmin - Subversioni administreerimise utiliit
  • svnserve - Subversioni server võrgus hoidla kättesaadavaks tegemiseks

Hoidla moodustamine

  • Hoidla moodustamiseks tuleb öelda (vaikimisi moodustatakse FSFS formaadis data store)
 $ svnadmin create /srv/svn/loomaaia-elektrifitseerimine
  • Projekti lähtepunktiks olev kataloog võiks olla sellise sisuga
$ cd /tmp/loomaaia-elektrifitseerimine
$ find . -ls
118313    4 drwxr-xr-x   5 www-data www-data     4096 Mar 28 17:58 .
118316    4 drwxr-xr-x   3 www-data www-data     4096 Mar 28 18:00 ./trunk
118317    4 drwxr-xr-x   4 www-data www-data     4096 Mar 28 18:01 ./trunk/www
118319    4 drwxr-xr-x   2 www-data www-data     4096 Mar 28 18:02 ./trunk/www/gfx
118323    4 -rw-r--r--   1 www-data www-data       10 Mar 28 18:02 ./trunk/www/gfx/pilt.gif
118318    4 drwxr-xr-x   2 www-data www-data     4096 Mar 28 18:02 ./trunk/www/css
118322    4 -rw-r--r--   1 www-data www-data        6 Mar 28 18:02 ./trunk/www/css/2.css
118321    4 -rw-r--r--   1 www-data www-data        6 Mar 28 18:01 ./trunk/www/css/1.css
118315    4 drwxr-xr-x   2 www-data www-data     4096 Mar 28 17:58 ./tags
118314    4 drwxr-xr-x   2 www-data www-data     4096 Mar 28 17:58 ./branches
  • Lähteandmete importimine SVN hoidlasse
$ svn import /tmp/loomaaia-elektrifitseerimine file:///srv/svn/loomaaia-elektrifitseerimine -m "Initial import"
Adding         /tmp/loomaaia-elektrifitseerimine/trunk
Adding         /tmp/loomaaia-elektrifitseerimine/trunk/www
...
Committed revision 1.

Tulemusena moodustatakse hoidlas sellised failid

# ls -d /srv/svn/loomaaia-elektrifitseerimine/* /srv/svn/loomaaia-elektrifitseerimine/db/* | less
/srv/svn/loomaaia-elektrifitseerimine/README.txt
/srv/svn/loomaaia-elektrifitseerimine/conf
/srv/svn/loomaaia-elektrifitseerimine/db
/srv/svn/loomaaia-elektrifitseerimine/db/current
/srv/svn/loomaaia-elektrifitseerimine/db/format
/srv/svn/loomaaia-elektrifitseerimine/db/fs-type
/srv/svn/loomaaia-elektrifitseerimine/db/fsfs.conf
/srv/svn/loomaaia-elektrifitseerimine/db/min-unpacked-rev
/srv/svn/loomaaia-elektrifitseerimine/db/rep-cache.db
/srv/svn/loomaaia-elektrifitseerimine/db/revprops
/srv/svn/loomaaia-elektrifitseerimine/db/revs
/srv/svn/loomaaia-elektrifitseerimine/db/transactions
/srv/svn/loomaaia-elektrifitseerimine/db/txn-current
/srv/svn/loomaaia-elektrifitseerimine/db/txn-current-lock
/srv/svn/loomaaia-elektrifitseerimine/db/txn-protorevs
/srv/svn/loomaaia-elektrifitseerimine/db/uuid
/srv/svn/loomaaia-elektrifitseerimine/db/write-lock
/srv/svn/loomaaia-elektrifitseerimine/format
/srv/svn/loomaaia-elektrifitseerimine/hooks
/srv/svn/loomaaia-elektrifitseerimine/locks
  • Berkeley DB formaadis hoidla moodustamiseks sobib öelda
# svnadmin create --fs-type bdb /srv/svn

ja sel juhul on hoidla failisüsteem erinev

/srv/svn/loomaaia-elektrifitseerimine/README.txt
/srv/svn/loomaaia-elektrifitseerimine/conf
/srv/svn/loomaaia-elektrifitseerimine/db
/srv/svn/loomaaia-elektrifitseerimine/db/DB_CONFIG
/srv/svn/loomaaia-elektrifitseerimine/db/__db.001
/srv/svn/loomaaia-elektrifitseerimine/db/__db.002
/srv/svn/loomaaia-elektrifitseerimine/db/__db.003
/srv/svn/loomaaia-elektrifitseerimine/db/__db.004
/srv/svn/loomaaia-elektrifitseerimine/db/__db.005
/srv/svn/loomaaia-elektrifitseerimine/db/__db.006
/srv/svn/loomaaia-elektrifitseerimine/db/__db.register
/srv/svn/loomaaia-elektrifitseerimine/db/changes
/srv/svn/loomaaia-elektrifitseerimine/db/checksum-reps
/srv/svn/loomaaia-elektrifitseerimine/db/copies
/srv/svn/loomaaia-elektrifitseerimine/db/format
/srv/svn/loomaaia-elektrifitseerimine/db/fs-type
/srv/svn/loomaaia-elektrifitseerimine/db/lock-tokens
/srv/svn/loomaaia-elektrifitseerimine/db/locks
/srv/svn/loomaaia-elektrifitseerimine/db/log.0000000001
/srv/svn/loomaaia-elektrifitseerimine/db/miscellaneous
/srv/svn/loomaaia-elektrifitseerimine/db/node-origins
/srv/svn/loomaaia-elektrifitseerimine/db/nodes
/srv/svn/loomaaia-elektrifitseerimine/db/representations
/srv/svn/loomaaia-elektrifitseerimine/db/revisions
/srv/svn/loomaaia-elektrifitseerimine/db/strings
/srv/svn/loomaaia-elektrifitseerimine/db/transactions
/srv/svn/loomaaia-elektrifitseerimine/db/uuids
/srv/svn/loomaaia-elektrifitseerimine/format
/srv/svn/loomaaia-elektrifitseerimine/hooks
/srv/svn/loomaaia-elektrifitseerimine/locks

Hoidlaid eristavaks tunnuseks on nt db/revs kataloogi esinemine.

Mõlema hoidla puhul toimub svn programmi kasutamine praktiliselt sarnaselt; vt http://svnbook.red-bean.com/en/1.1/ch05.html#svn-ch-5-sect-1.3

Ligipääsu hoidlale kontrollivad kolm faili

  • /srv/svn/fai-config/conf/svnserve.conf - üldine konfiguratsioon
  • /srv/svn/fai-config/conf/passwd - kasutajate paroolifail
  • /srv/svn/fai-config/conf/authz - kasutajate autoriseerimine

Vaikimisi saab lokaalsest arvutist kasutaja svn'i piiramatult, üle võrgu saab anonüümne kasutaja lugeda.

Väljavõtte tegemine

Lokaalsest arvutist

 $ svn checkout file:///srv/svn/fai
 $ svn export file:///srv/svn/fai

Üle võrgu, svn kasutab porti 3690/tcp, vajadusel küsitakse kasutajanime ja parooli

$ svn checkout svn://192.168.10.199/fai-config

Üle võrgu, Apache veebiserveri abil vahendatud SVN repositooriumist (kasutaja peab ise otsustama, kas sedasi parooli nö .bash_historisse logida on mõistlik)

$ svn --username=priit --password=parool123 co https://svn.loomaaed.tartu.ee/tarkvara/svn/projektid/test-1
-----------------------------------------------------------------------
ATTENTION!  Your password for authentication realm:
  <https://svn.loomaaed.tartu.ee:443> Subversion Repository
can only be stored to disk unencrypted!  You are advised to configure
your system so that Subversion can store passwords encrypted, if
possible.  See the documentation for details.
You can avoid future appearances of this warning by setting the value
of the 'store-plaintext-passwords' option to either 'yes' or 'no' in
'/home/imre/.subversion/servers'.
-----------------------------------------------------------------------
Store password unencrypted (yes/no)? yes

kusjuures ligipääs salvestatakse sarnaselt

$ cat ~/.subversion/auth/svn.simple/0c1a90a48702atryg0bc796ea562485a
K 8
passtype
V 6
simple
K 8
password
V 7
parool123
K 15
svn:realmstring
V 60
<https://svn.loomaaed.tartu.ee:443> Subversion Repository
K 8
username
V 4
priit
END

Ning samuti tuleb kasutajal otsustada, kas selliselt avatekstina on mõistlik ligipääs salvestada oma kodukataloogis (tõenäoliselt on see sel juhul kasutatav neile, kes pääsevad varundusele ligi). Samas, selline salvestamine teeb edaspidise Subversioni kasutamise palju mugavamaks kuna kasutaja ei pea enam repositooriumi poole pöördumisel kasutajanime ega parooli näitama.

Väljavõttega töötamine

  • Olemasoleva faili muudatuse hoidlasse kopeerimiseks sobib öelda
$ svn --username priit commit -m "Oluline muudatus seoses loomade toitumisega"
  • Faili lisamisel
$ svn --username priit add css/3.css
A         css/3.css
$ svn --username priit commit -m "Faili css/3.css lisamine"
Adding         www/css/3.css
Transmitting file data .
Committed revision 4.
  • Kataloogi lisamisel
$ svn --username priit add docs
A         docs
$ svn --username priit commit -m "Kataloogi docs lisamine"
Adding         www/docs
Transmitting file data .
Committed revision 4.
  • Kataloogi kustutamine hoidlast
$ svn --username priit delete http://loomaaed.tartu.ee/projektid/loomaaia-elektrifitseerimine/trunk/www/docs
  • Muudatuse tagasivõtmine, nt add puhul
$ svn revert failinimi
  • Tööversiooni failide kontrollimine, st millised failid ei ole versioonikontrolli alla lisatud
$ svn status
?       pf-sync.sh-tootav
  • Tööversiooni uuendamine viimase repositooriumi sisuga
$ svn update

Hoidlas töötamine

  • kataloogide nimekirja esitamine koos suuruste, omanikega jms
$ svn list -v file:///srv/svn
  • kataloogide nimekiri rekursiivselt
$ svn list -R file:///srv/svn
  • kataloogi tekitamine
$ svn mkdir file:///srv/svn/test1 -m "test1 kataloogi tekitamine"
  • kataloogi kustutamine
$ svn rm file:///srv/svn/test1 -m "test1 kataloogi kustutamine"

Revisioni kasutamine

Olgu revision numbriks 31880, sel juhul saab selle versiooni kopeerida öeldes

$ svn export -r 31880 --username=priit https://svn.loomaaed/projektid/test/trunk

Sildi kasutamine

Sildi moodustamine

$ svn copy --username=priit https://svn.loomaaed/projektid/test/trunk
    https://svn.loomaaed/projektid/test/tags/release-1.0
    -m "esimese reliisi tag"

Sildi järgi exportimine

$ svn export --username=priit https://svn.loomaaed/projektid/test/tags/testprojekt_0002_BUGFIX/www

Hoidlale ligipääsu korraldamine

Selleks, et hoidla ressurssidele saaks ligi ainult autenditud kasutaja tuleb kasutada nt selliseid seadistusfaile

 $ egrep -v "^#|^$" /srv/svn/fai-config/conf/svnserve.conf
 [general]
 anon-access = none
 auth-access = write
 password-db = passwd
 authz-db = authz
 [sasl]
 $ egrep -v "^#|^$" /srv/svn/fai-config/conf/passwd
 [users]
 imre = parool
 $ egrep -v "^#|^$" /srv/svn/fai-config/conf/authz
 [aliases]
 [groups]
 [/]
 priit = rw

Kasutamiseks tuleb öelda

 $ svn checkout svn://priit@192.168.10.199/fai-config

Apache veebiserveri kasutamine kaugligipääsuks

Hoidlale kaugligipääsu korraldamine Apache veebiserveri vahendusel on eelistatud lahendus sellistel põhjustel

  • https:// kasutamise võimalus turvaliseks andmevahetuseks
  • hoidla kasutajate autentimise võimalus ldap kataloogi abil

Apache veebiserveri ettevalmistamine

 # apt-get install apache2 libapache2-svn
 ..
 Enabling module dav.
 Enabling module dav_svn.

Kasutajate autentimine vastu tekstifaili

 <Location /tarkvara/svn/projektid>
   DAV svn
   SVNParentPath /srv/svn
   AuthzSVNAccessFile /etc/svn-dav-passwd
   AuthType Basic
   AuthName "Subversion repository"
   AuthUserFile /etc/svn-dav-htpasswd
   Require valid-user
   Order Allow,Deny
   Allow from All
  </Location>

kus

  • AuthzSVNAccessFile - /etc/svn-dav-passwd on sarnase sisuga
[groups]
[/]
* =
priit = rw
mart = r
[/projektinimi]
mart = rw
[/projektinimi/trunk/php/translations]
rein = rw

Kasutajate autentimine vastu LDAP kataloogi

 <VirtualHost 192.168.6.130:443>
   ServerName svn.loomaaed.tartu.ee
   DocumentRoot /srv/svn
   ErrorLog /var/log/apache2/svn.loomaaed.tartu.ee-error.log
   TransferLog /var/log/apache2/svn.loomaaed.tartu.ee-access.log
   SSLEngine on
   SSLCipherSuite HIGH:MEDIUM
   SSLCertificateFile /etc/apache2/serdid/svn.loomaaed.tartu..ee-cert.pem
   SSLCertificateKeyFile /etc/apache2/serdid/svn.loomaaed.tartu..ee-key.pem
   SSLCertificateChainFile /etc/apache2/serdid/loomaaed-ca-chain.pem
   <Location /tarkvara/svn/projektid>
     DAV svn
     SVNParentPath /srv/svn/projektid
     AuthzSVNAccessFile /etc/svn-dav-passwd
     AuthType Basic
     AuthName "Subversion repository"
     AuthBasicProvider ldap
     AuthzLDAPAuthoritative on
     AuthLDAPURL "ldaps://ldap.loomaaed.tartu.ee/DC=loomaaed,DC=tartu,DC=ee?uid?sub?(objectClass=*)"
     Require valid-user
     Order Allow,Deny
     Allow from All
   </Location>
 </VirtualHost>

Kaugligipääs svnserve vahendusel

TO DO

WebSVN

WebSVN http://www.websvn.info/ tarkvara võimaldab kasutada Subversion hoidlat ... Tarkvara paigaldamiseks sobib öelda

# apt-get install websvn

Hilisemaks seadistamiseks sobib öelda

# dpkg-reconfigure websvn

Seadistamine

Programmi töö juhtimine toimub /etc/websvn/config.php abil, kust saab kontrollida

  • milliseid hoidlaid esitatakse (kas kohalikust failisüsteemist või üle võrgu)
  • millised on ligipääsupiirangud
  • gzip, tar võimalused

Kasutamine

Brauseris avaneb sarnane pilt

TODO

RapidSVN

Tarkvara paigaldamiseks sobib öelda

# apt-get install rapidsvn

Hoidla haldamine

svnadmin dump ja load on vajalik nt teatud versiooni uuenduste puhul, sel juhul reeglina mainitakse seda selgalt CHANGES failis, a la http://svn.apache.org/repos/asf/subversion/tags/1.6.17/CHANGES.

svnadmin dump

Subversion andmebaasi moodustamiseks sobib öelda

$ svnadmin dump /srv/svn/projektinimi > projektinimi-20110720-svn-dump.db
* Dumped revision 0.
* Dumped revision 1.
* Dumped revision 2.
* Dumped revision 3.

kus

  • /tmp/svn - versioonihoidla kataloog
  • vaikimisi salvestatakse dump faili kõik versioonid

svnadmin load

Subversion andmebaasi sisselugemiseks sobib öelda

$ svnadmin create /tmp/svn-2
$ svnadmin load /tmp/svn-2 < /tmp/tmp-svn-dump.db
<<< Started new transaction, based on original revision 1
     * adding path : 1 ... done.
     * adding path : 1/df ... done.
     * adding path : 2 ... done.
     * adding path : 2/ifconfig ... done.
     * adding path : 2/lspci ... done.
------- Committed revision 1 >>>
<<< Started new transaction, based on original revision 2
     * editing path : 2/ifconfig ... done.
------- Committed revision 2 >>>
<<< Started new transaction, based on original revision 3
     * editing path : 2/ifconfig ... done.
------- Committed revision 3 >>>

svn_load_dirs kasutamine

TODO

Märkused

  • Subversion v. 1.7 puhul kasutatakse Git tarkvarale sarnaselt ainult nö kõige ülemises väljavõtte (ingl. k. checkout) kataloogis .svn nimelist alamkataloogi; varasemalt oli see igas väljavõtte kataloogis.

Vahel aitab lokaadi seadmine enne svn käskude ütlemist, nt

$ export LANG=et_EE.UTF8

Kasulikud lisamaterjalid