Subversion (svn)

Comandes bàsiques

svn import Importa un fitxer o directori no versionat (per importar la primera vegada a svn)
svn co (checkout) Baixa el projecte la primera vegada (crea la còpia local)
svn export Exporta un fitxer o directori (serveix per fer una release sense informació de svn)
svn up (update) Actualitza la còpia local
svn ci (commit) Envia tots els fitxers modificats
svn cp (copy) Copia fitxers i directoris - (també fer branques que permeten fer “forks” del desenvolupament principal (trunk))
svn mv Mou un fitxer o directori
svn rm Borra fitxers i directoris
svn add Afegeix un fitxer o directori
svn mkdir Crea directori
svn status Mostra els fitxers que han canviat a la còpia local
svn revert Desfa els canvis efectuats a la còpia local
svn cleanup Desbloqueja la còpia local (necessari quan alguna operació no ha pogut finalitzar correctament)
svn diff Crea diffs (diferències entre versions)
svn log Veure l'històric de versions en la còpia local
svn ls Llista fitxers del respositori
svn ls file:///home/zikzak/svn/nom_projecte
svn info Veure informació de la còpia local
svn help Ajuda de subversion
svn propdel Borra propietats
svn propedit Edita propietats
svn propget Obté una propietat
svn proplist Llista propietats
svn propset Estableix una propietat

Creació del repositori i carpetes inicials i importació

Baixar-se una còpia local

mkdir -p carpeta_copia_local
cd carpeta_copia_local
svn co file:///home/zikzak/svn/nom_projecte

Procés de treball habitual amb svn

  1. Editem fitxers, afegim nous fitxers amb svn add, copiem fitxers amb svn cp, movem fitxers amb svn mv, eliminem fitxers amb svn rm, …
  2. Llistem els canvis locals efectuats:
    svn status
  3. Actualitzem còpia local:
    svn up
  4. Resolem les possibles col·lisions que hagin aparegut. Per cada col·lisió caldrà eliminar els 3 fitxers creats.
  5. Pugem els nostres canvis locals:
    svn ci -m "Text explicatiu dels nostres canvis"

Creació i aplicació de patch

Per crear un fitxer amb un patch que contingui els canvis fets localment:

svn diff > ~/fitxer_canvis.diff

Per crear un fitxer amb un patch que contingui els canvis fets de la revisió OLD a la revisió NEW:

svn diff -r OLD:NEW > ~/fitxer_canvis.diff

Per crear un fitxer amb un patch que contingui els canvis fets de la revisió REV-1 a la revisió REV:

svn diff -c REV > ~/fitxer_canvis.diff

Per crear un fitxer amb un patch que contingui els canvis fets entre 2 carpetes old i new:

diff -rupN old/ new/ > fitxer_canvis.patch

Per aplicar el patch del fitxer en el codi actual:

patch -p0 -i ~/fitxer_canvis.diff

p0. El 0 seria el primer nivell de la ruta de directori. Si el diff contingués una ruta diferent, podem especificar el nivell: p1, p2,…

Incorporar modificacions externes a una còpia local

# Si ho fem a trunk:

cd carpeta_copia_local/trunk
rsync -rc carpeta_nous_fitxers/* .

Copiem només els nous fitxers o els modificats recursivament

# Si ho fem a la branca zikzak:

cd carpeta_copia_local/branches/zikzak
rsync -rc carpeta_nous_fitxers/* .

# Tots els fitxers/directoris nous tenen un status ?. Cal llistar-los i afegir-los amb la comanda svn add

svn status|grep ? > fitxers_nous

# Posar tots els noms de fitxers/directoris en una sola línea i executar:

svn add <llista de fitxers/directoris>
svn ci -m"Afegit els fitxers/directoris nous/modificats"
svn update

Aplicar els canvis fets a trunk a una branca

# Ens apuntem els números versions incial i final que interesen agafar de la branca trunk

cd carpeta_copia_local/trunk
svn log

# Els canvis fets a la branca trunk entre les versions 2 i 5 els apliquem a la branca zikzak

cd carpeta_copia_local/branches/zikzak
svn merge -r 2:5 file:///home/zikzak/svn/nom_projecte/trunk

# Hem de resoldre les col·lisions. Les podem veure amb:

svn status

# I finalment, fem un commit

svn ci -m "Text explicatiu dels nostres canvis"

Per ignorar fitxers

Globalment: Editar la següent línia del fitxer ~/.subversion/config

global-ignores = *.o *.lo *.la #*# .*.rej *.rej .*~ *~ .#* .DS_Store *.pyc

Localment: ignorar fitxer, plantilla de fitxer o directori. Situar-nos en el directori i executar:

svn propset svn:ignore <nom_fitxer> .

Cal que el fitxer, fitxers o directoris no estiguessin sota el control de subversion. Si no caldrà eliminar-los amb svn rm <nomfitxer> i tornar-los a crear de nou.

Nota: Si volem indicar un conjunt de fitxers amb els comodins * o ? caldrà tancar el <nom_fitxer> amb cometes. Per ex., per ignorar tots els fitxers d'un directori:

svn propset svn:ignore '*' .

Afegir usuaris per l'accés a SVN via http

To add the first entry, ie.. to add the first user, you can run the following command:

sudo htpasswd -c /etc/subversion/passwd user_name

It prompts you to enter the password. Once you enter the password, the user is added.

To add more users after that, you can run the following command:

sudo htpasswd /etc/subversion/passwd second_user_name

If you are uncertain whether the passwd file exists, running the command below will tell you whether the file already exists:

cat /etc/subversion/passwd

Now, to access the repository you can run the following command:

$ svn co http://hostname/svn/myproject myproject --username user_name