miércoles, enero 11, 2006

Guía de supervivencia con Subversion

Estas son mis notas de uso del subversion de verdad se los recomiendo mucho sobre todo más que el CVS (por complicado) o el VSS (por chafa) :

Checkout
svn co repositorio/trunk

Una version
svn checkout --revision 1729

Info del directorio

svn info

Status
svn status
svn status --verbose
svn status --show-updates --verbose

Update
svn update
svn update --revision 1729

Commit
svn commit -m "un comentario"

Branch
svn copy repositorio/trunk repositorio/branches/entrega16_12_2005 -m "Creando una copia de la entrega"

Log hasta donde se creo el branch
svn log --verbose --stop-on-copy

Merge
Usando la versión dada por el comando anterior luego cd a la copia local del trunk (recien update)

svn merge -r 341:HEAD repositorio/branches/entrega16_12_2005

Cosas a verificar antes de dar commit a trunk: diff, compile, test

svn commit -m "Merged rV1:V2 al trunk"

Regresando version :-(

svn merge -r 303:302 repositorio/trunk
U un archivo

svn status
M un archivo

svn diff

(Para verificar que los cambios se hayan ido)


svn commit -m "Undoing change committed in r303."
Sending un archivo

Transmitting file data .
Committed revision 350.

Shortcut para crear un branch
(No recomendado para novatos!!!)


cd proyecto

svn info | grep URL
URL: repositorio/trunk

svn switch repositorio/branches/entrega16_12_2005
Updated to revision 341.

svn info | grep URL
URL: repositorio/branches/entrega16_12_2005

¿O que tal un branch de solo una parte?

Si solo quieres modificar un directorio específico del proyecto y seguir recibiendo actualizaciones del trunk puedes aplicar el svn switch a ese directorio!!

Removiendo un branch

svn delete repositorio/branches/entrega16_12_2005 -m "Removing obsolete branch of calc project."

Committed revision 375.

Reviviendo un branch
(O por que nunca me decido...)

svn copy -r 374 repositorio/branches/entrega16_12_2005
repositorio/branches/entrega16_12_2005


Conflictos
Supongamos que tenemos un conflicto, así se verá el archivo:

$ svn update
C unarchivo
Subversion crea varios archivos:
$ ls update unarchivo.*
unarchivo unarchivo.mine unarchivo.r2 unarchivo.r1

$ cat unarchivo
...
codigo sin conflicto
...
<<<<<<< .mine
código en conflicto escrito por mí
=======
código en conflicto escrito por alguien más
>>>>>>> .r2
...
mas código sin conflicto
...

Solución 1: A mano ...

Arreglas lo que tengas que arreglar en el archivo y luego le das

svn resolved unarchivo
$ svn commit -m "Resuelto el conflicto"

Solución 2: Copiando ...

Si la versión buena es la r2 entonces

$ cp unarchivo.r2 unarchivo
$ svn resolved unarchivo
$ svn commit -m "Resuelto quitando los cambios de alguien más"


Solución 3: Tirando tus cambios...
svn revert unArchivo
svn commit -m "Resuelto nos quedamos con los cambios de alguien más"

Diferencias

Local y HEAD
svn diff archivo

Local y una versión
svn diff --revision 3 archivo

Versión y versión
svn diff --revision 2:3 archivo

Ver un archivo completo
(Sin bajarlo)
svn cat --revision 2 archivo
svn cat --revision 2 archivo > archivo.v2

Listas
svn list --verbose

Tags
Como en subversion todo es un directorio los tags se crean igual que un branch, solamente el concepto es diferente, el tag es una versión congelada, el branch es para cambios con los que se va a hacer merge...

$ svn copy repositorio/trunk
repositorio/tags/entrega04_01_2006
-m "Liberando una version"


Bueno con esto es más que suficiente, han de poder sobrevivir con esto :-)

1 Comments:

Anonymous Anónimo said...

Muy buen post!!
Una pregunta:Como hago lo siguiente:
Supongamos que estamos en la revision 15
Hago un update de una revision anterior
svn update -r 10
y luego quiero poner esta revision como la actual haciendo:
svn commit -m "Mensaje cualquiera"
Pero no la actualiza en el repositorio

viernes, 03 octubre, 2008  

Publicar un comentario

<< Home