Subversion nello sviluppo web
Fabio Serra
Omniwhere s.r.l.
Argomenti
- Concetti base
- Organizzazione dei repository
- Copia live su web
- Suggerimenti vari
Che cosa è Subversion
- Sistema centralizzato per il controllo delle versioni dei file
- Client-Server multipiattaforma
- Modello di accesso remoto preferito HTTP/S (Apache mod_dav_svn)
A chi serve
- A più persone che devono lavorare contemporaneamente sullo stesso codice (evitare sovrascritture, sapere chi ha modificato cosa...)
- A chi vuole avere un continuo backup dei propri file (Time Machine)
- A chi vuol mostrare lo stato dei sorgenti sul web
- A chi vuole avere un maggior controllo sulle release, bug e timeline integrandolo
con sistemi di gestione del software come Tracs
- A chi lavora da postazioni multiple
Checkout
- svn co http://opensource.adobe.com/svn/opensource/flex/sdk/trunk/ /home/faser/projects/flexsdk/
- Tasto destro -> Tortosise SVN -> Checkout
Commit
Inviare le proprie modifiche al repository
Update
Scaricare dal repository le modifiche fatte dagli altri
Merge
Il nostro file in locale è più vecchio di quello nel repository. E' richiesto un update.
- Nessuna sovrapposizione: merge automatico
- Sovrapposizione: conflitto da risolvere manualmente
Creare un repository
- boletus:/srv/svn/repos # svnadmin create progetto
- boletus:/srv/svn/repos # chown -R wwwrun progetto
Repository layout
Tutto è una directory
Branches
- Isolare i cambiamenti su linee diverse di sviluppo
- Utili per preparare una release da distribuire
Cosa mettere nel repository
SI
- Tutto quello che riguarda il progetto non solo i sorgenti, ma anche docs, email, schema db etc
NO
- I file di configurazione devi vari programmi del singolo sviluppatore:
.project di Eclipse
.thumbnails di Windows
- Password o dati riservati nel repository. Difficile eliminarli completamente.
- File "generati" dai sorgenti (swf, exe..) con alcune eccezioni
Sviluppo centralizzato o distribuito?
- Centralizzato: Web Server, Application Server, DB Server, directory degli utenti
- Distribuito: ogni sviluppatore deve avere una replica in locale dell'ambiente di produzione
- Valutare la tipologia di lavoratori: programmatori, grafici
- Valutare la locazione dei lavoratori: connessi o disconnessi
Creare una copia live del repository
- boletus:/srv/www/htdocs # mkdir progetto
- boletus:/srv/www/htdocs # svn co file:///srv/svn/repos/progetto/trunk/ /srv/www/htdocs/progetto/
- boletus:/srv/www/htdocs # chown -R wwwrun progetto/
- boletus:/srv/svn/repos/owdocs/hooks # vi post-commit
- boletus:/srv/svn/repos/owdocs/hooks # chown wwwrun post-commit
- boletus:/srv/svn/repos/owdocs/hooks # chmod u+x post-commit
- /usr/bin/svn up /srv/www/htdocs/progetto > /srv/svn/logs/progetto_postcommit.log
VirtualDocumentRoot
#Dynamic VHost
#examples:
#http://progetto.example.com
#http://progetto.admin.example.com
<VirtualHost *:80>
UseCanonicalName off
VirtualDocumentRoot /srv/www/htdocs/%-3+
<Location />
AuthType Basic
AuthName "Company Dev Area"
AuthUserFile /etc/apache2/htpasswd/users
Require valid-user
</Location>
</VirtualHost>
Usare le keywords
Keyword substitution
<!---
/*==============================================================================
Insert a file description
Filename: filename.cfm
Created: 2008-02-14
Initial Developer: Fabio Serra (faser@omniwhere.com)
$LastChangedDate: 2008-02-26 10:28:20 +0100 (mar, 26 feb 2008) $
$LastChangedRevision: 19 $
$LastChangedBy: faser $
==============================================================================*/
--->
auto-props
auto-props
*.cfm = svn:keywords=LastChangedDate LastChangedRevision LastChangedBy
*.cfc = svn:keywords=LastChangedDate LastChangedRevision LastChangedBy
*.js = svn:keywords=LastChangedDate LastChangedRevision LastChangedBy
*.html = svn:keywords=LastChangedDate LastChangedRevision LastChangedBy
*.as = svn:keywords=LastChangedDate LastChangedRevision LastChangedBy
*.mxml = svn:keywords=LastChangedDate LastChangedRevision LastChangedBy
*.css = svn:keywords=LastChangedDate LastChangedRevision LastChangedBy
*.sql = svn:keywords=LastChangedDate LastChangedRevision LastChangedBy