====== 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ó =====
* Al servidor:
cd /home/zikzak/svn
svnadmin create nomprojecte
* Si es vol una configuració sense usuari anònim, editar el fitxer nomprojecte/conf/svnserve.conf:
[general]
anon-access = none
auth-access = write
password-db = passwd
* i afegir al fitxer nomprojecte/conf/passwd, els usuaris autoritzats a modificar el projecte:
[users]
joan = pwd_joan
josep = pwd_josep
* Als clients:
svn mkdir -m'Directoris trunk branches i tags' file:///home/zikzak/svn/nom_projecte/trunk file:///home/zikzak/svn/nom_projecte/branches file:///home/zikzak/svn/nom_projecte/tags
cd carpeta_projecte_descarregat_i_descomprimit
svn import file:///home/zikzak/svn/nom_projecte/trunk -m"Projecte X mòduls oficials"
svn copy file:///home/zikzak/svn/nom_projecte/trunk file:///home/zikzak/svn/nom_projecte/branches/zikzak -m"Projecte X mòduls oficials + Modificacions zikzakmedia"
===== 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 =====
- Editem fitxers, afegim nous fitxers amb svn add, copiem fitxers amb svn cp, movem fitxers amb svn mv, eliminem fitxers amb svn rm, ...
- Llistem els canvis locals efectuats: svn status
- Actualitzem còpia local: svn up
- Resolem les possibles col·lisions que hagin aparegut. Per cada col·lisió caldrà eliminar els 3 fitxers creats.
- 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 =====
* Trunk: El nucli. El projecte oficial. Per exemple, joomla 1.5.10
* Branca: Derivats. El nostre CMS. Per exemple: cms
# 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
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 .
Cal que el fitxer, fitxers o directoris no estiguessin sota el control de subversion. Si no caldrà eliminar-los amb svn rm i tornar-los a crear de nou.
Nota: Si volem indicar un conjunt de fitxers amb els comodins * o ? caldrà tancar el 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