A blog about data, information and Tech by Mario Alberich

        

Phing (VII) - Operaciones con control de versiones

Si la automatización de tareas es uno de los grandes objetivos de Phing, la gestión del control de versiones es un objetivo importante. Las tareas de despliegues sistemáticos, principalmente para el testeo y la integración continua se pueden agilizar utilizando Phing.

Para el caso, veremos las tareas disponibles para las dos herramientas más populares de control de versiones: Git y Subversion. Salvo excepciones notables, las tareas de ambos casos permiten más o menos los mismos objetivos, pero dado que los dos sistemas tienen algunas diferencias estructurales y de nomenclatura, las tareas varían ligeramente.

Los siguientes apartados asumen que ya tienes unas nociones mínimas del concepto de control de versiones, así como de los comandos más habituales. Si no fuera así, visita la documentación de Git o el libro de Subversion.

Inicialización de repositorio


En el caso de git, tenemos GitInit:


Lo anterior inicializa un repositorio. La opción bare permite inicializarlo sin mostrar la estructura de directorios. Esto es especialmente apropiado al instalarlo en servidores que alojarán estos repositorios (al estilo Github o similares).

Subversion en este caso no tiene una rutina de inicialización de repositorios.

Registro de actividad (log)


En el caso de Git:


    since="Sun Jan 23 23:55:42 2013 +0300"
until="Mon Jan 24 09:59:33 2013 +0300"
outputProperty="logs"
repository="/ruta/al/repositorio" />

Y en el caso de subversion:


    svnpath="/usr/bin/svn"
workingcopy="/home/user/svnwc"
propertyname="svn.log"/>

En ambos casos tienen otras varias opciones, aunque hay que reconocer que Git ofrece más posibilidades de filtro y formatos de salida.

Obtener copias de repositorios ajenos


En git, esta función se cumple con git clone:


    repository="git://github.com/path/to/repo/repo.git"
targetPath="/ruta/al/repositorio"/>

En el caso de subversion, la operación es la de checkout:


   svnpath="/usr/bin/svn"
repositoryurl="svn://localhost/project/trunk/"
todir="/ruta/a/copia/de/trabajo"/>

Trabajo con ramas (branching y merging)


En el caso de Git, las operaciones son el GitBranch, GitMerge y GitCheckout:


    repository="/ruta/a/repo"
branchname="nombre-rama" />


    repository="/ruta/a/repo"
remote="nombre-rama-1 nombre-rama-2"
message="merging repos" commit="true" />


    repository="/ruta/al/repositorio"
branchname="mi-rama" quiet="true" create="true" />

En el caso de subversion, utilizamos SvnCopy y SvnSwitch:


   svnpath="/usr/bin/svn"
username="anony"
password="anony"
nocache="true"
repositoryurl="svn://localhost/project/trunk/"
todir="svn://localhost/project/tags/0.1"/>


   svnpath="/usr/bin/svn"
repositoryurl="http://localhost/project/tags/2.4.2"
todir="/ruta/a/copia/trabajo"/>

No existe tarea de Subversion para el proceso de merge.

Sincronización de repositorios


Git dispone de las tareas GitPush, GitPull, y GitFetch:


    repository="/ruta/al/repositorio"
refspec="master:foobranch" tags="true" />


    repository="/ruta/al/repo" all="true" />


    repository="/ruta/al/repo" all="true" />

Subversion dispone de las tareas SvnCommit, y SvnUpdate,


    workingcopy="/ruta/a/copia/local"
message="Comentario del commit" />


   svnpath="/usr/bin/svn"
todir="/ruta/a/copia/local"/>

 

© 2007 and beyond Mario Alberich, licensed under CC-BY-SA unless stated otherwise.