====== 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