LesOlivex

Servicios informáticos



De branch a trunk en subversion

Category : subversion dic 21st, 2014

Añadir los cambios de una ramificación del proyecto a la rama principal.

Nos situamos en la copia local de la rama:

svn log --stop-on-copy

Recogemos la versión en la que se inicio la ramificación:

------------------------------------------------------------------------
r342 | eduardo | 2010-10-04 08:29:44 +0200 (lun 04 de oct de 2010) | 1 línea

Rama de programación

Nos vamos a la copia local de la rama principal y comprobamos cambios que se realizaran con –dry-run sin hacerlos:

svn merge --dry-run -r 342:HEAD file:///var/subversion/gcm/branches/eduardo

--- Fusionando r343 hasta r348 en «.»:
U    proyecto/File/es/Seccion/index.html
D    proye...

Realizamos los cambios definitivamente:

svn merge -r 342:HEAD file:///var/subversion/gcm/branches/eduardo

Actualizamos servidor de subversion:

svn ci

Conceptos basicos sobre subversion

Category : subversion dic 21st, 2014

Varios

checkout: Saca el fichero del repositorio y lo almacena localmente para poder trabajar con él.
checkin: Una vez realizados los cambios, volcamos el fichero al repositorio donde estará disponible para el resto de desarrolladores.
status: Indica el estado actual del fichero.
log: Saca un listado con las revisiones del fichero

Iniciando Subversion

svnadmin create /var/svn

Iniciando proyectos

Nos colocamos en directorio donde tenemos el proyecto y lo importamos svn mkdir file:///var/svn/gcm svn import gcm file:///var/svn/gcm
Actualizar con remoto

svn up

Volver a una versión anterior

svn up -r2

Volver atrás con un archivo concreto

svn update -r

Añadir de un golpe todos los ficheros con interrogante

#!/bin/bash
DIFS="$IFS" ; IFS=$'\n'
for x in $(svn status | grep ^? | awk -v FS='?      ' '{print $2}') ; do
svn add "$x"
done
IFS="$DIFS"

lo mismo con los borrados:

#!/bin/bash
DIFS="$IFS" ; IFS=$'\n'
for x in $(svn status | grep ^! | awk -v FS='!      ' '{print $2}') ; do
svn del "$x"
done
IFS="$DIFS"

Descartar archivos a tener en cuenta

Con svn propedit svn:ignore
, nos pedira una lista de rutas en formato de expresión regular para detectar los archivos o directorios que queremos descartar de ser tratados por subversión

Ejemplo para descartar archivos de log que actualmente estan en repositorio.

svn remove log/*
svn commit -m 'borrar todos los ficheros de log de subversion'
svn propset svn:ignore "*.log" log/
svn update log/
svn commit -m 'ignorar todos los ficheros en log/ que terminen en .log

Dividir proyectos

Teniendo Scripts, proyectos y gcm dentro de un mismo repositorio vamos a dividirlos

Primero creamos los proyectos:

svnadmin create /var/svn/Scripts
svnadmin create /var/svn/proyectos
svnadmin create /var/svn/gcm

Generamos copia del actual | filtramos | añadimos:

svnadmin dump /var/svn/ | svndumpfilter exclude proyectos Scripts | svnadmin load /var/svn/gcm
svnadmin dump /var/svn/ | svndumpfilter exclude proyectos gcm | svnadmin load /var/svn/Scripts
svnadmin dump /var/svn/ | svndumpfilter exclude Scripts gcm | svnadmin load /var/svn/proyectos

Enlaces relacionados

Un buen resumen

Git, comandos básicos

Category : Control de versiones, Git dic 21st, 2014

Iniciar control de versiones en proyecto existente

git init
git add .
git commit -m 'Iniciamos control de versiones'

Comandos básicos

git add <archivo>                                    # Añadir archivo
git mv <archivo> <destino>                      # Mover archivo
git rm <archivo>                                    # Borrar archivo
git status                                              # Ver estado de proyecto
git show                                               # Información sobre el último commit
git commit -m 'Descripción del cambio'       # Guardar el estado actual
git push                                               # Sube al servidor los cambios realizados
git pull                                                # Actualizar local con servidor

Configuración

git config --global user.name "Eduardo Magrané"
git config --global user.mail "email@dominio.com"

También podemos modificar directamente el fichero .gitconfig

Descartar directorios o archivos en git

Editar .git/info/exclude, ejemplo:

# git ls-files --others --exclude-from=.git/info/exclude
# Lines that start with '#' are comments.
# For a project mostly in C, the following would be a good set of
# exclude patterns (uncomment them if you want to use them):
# *.[oa]
# *~
docs
logs
tmp

Trabajando con ramas

Crear una rama

git branch rama_nueva

Borrar rama

git branch -d  rama

Entramos en ella

git checkout rama_nueva

Hacemos modificaciones que añadimos a git y commits sobre la rama

git add . 
git commit -a

Fusionamos la rama con el master

git checkout master 
git merge rama_nueva

Si nos encontramos en la situación de haber realizado cambios antes de ir a la rama deseada, mientras no hayamos realizado commit podemos movernos a la rama y llevarnos los cambios.

git checkout -b rama_de_trabajo

Hacemos commit en la rama con los cambios y al volver a la master estará como antes.

Tags con git

Tags anotados

Estos generan una copia exacta del estado del repositorio.:

git tag -a v1.0 -m 'Release v1.0'

Este objeto se creara en .git/objects y creará una referencia en .git/refs/tags/v1.0 que tendrá el SHA-1 del tag.

Tags ligeros

No generan un objeto tag como los anteriores, solo crea una referencia en .git/refs/tags/v2.0 que tendrá el SHA-1 del HEAD:

git tag v2.0

Moviendose entre Tags

Git nos permite movernos entre los tags como si fueran ramas pero sin la posibilidad de modificarlos.:

git checkout v2.0

Listar Tags:

git tags -l

git checkout v2.0

Compartir Tags (GitHub por ejemplo):

# todas las etiquetas
git push --tags

#una etiequeta en particular
git push origin v2.0

Visualizar el contenido de un Tag:

git show v1.0

Trabajando en grupo

Un ejemplo de metodología para trabajar en grupo es git-flow, estudiarla te permite entender mejor a git.

doxygen y github

Category : Control de versiones, Documentación de código dic 21st, 2014

La creación de archivos de documentación para doxygen suelen crearse con la extensión dox, lo cual nos permite separar el código de una documentación ampliada sobre la aplicación. El problema es que github no reconoce esta extensión pidiendonos que creemos un archivo readme.md para documentar los directorios.

La solución que he encontrado, es poner la extensión rst a estos archivos, doxygen generará igualmente la documentación y github no se quejará

Ignorar archivos con git

Category : Control de versiones, Git dic 21st, 2014

Si no queremos que git trabaje sobre algunos archivos de nuestra carpeta del proyecto podemos decirle que los ignore.

Editamos .git/info/exclude, un ejemplo:

# git ls-files --others --exclude-from=.git/info/exclude
# Lines that start with '#' are comments.
# For a project mostly in C, the following would be a good set of
# exclude patterns (uncomment them if you want to use them):
# *.[oa]
# *~
tags
proyecto/log
proyecto/cache
docs/
*.swp
cscope*

En caso de que ya tenga indexado un archivo que queremos ignorar hay que forzar el borrado de su cache.

git rm --cached <file>