Curso Python DGA 2011/inmersion python/recursos adicionales

= Control de versiones: GIT =

Durante el desarrollo del curso vamos a hacer uso de un sistema de control de versiones, concretamente GIT. Buena parte de ejemplos y ejercicios estarán alojados en un repositorio de

Git es un sistema de control de versiones distribuido. A diferencia de sistemas de repositorios centralizados como SVN, cada usuario tiene una copia completa del repositorio, con todo el histórico. Esto permite hacer una gestión de ramas coherente y muy rápida.

Documentación
La página oficial de documentación sobre git: http://git-scm.com/documentation, dentro de la que se puede encontrar el tutorial oficial para empezar (http://www.kernel.org/pub/software/scm/git/docs/gittutorial.html)
 * manual oficial: http://www.kernel.org/pub/software/scm/git/docs/user-manual.html


 * Quickstart directo y conciso: https://git.wiki.kernel.org/index.php/QuickStart
 * git community book: http://book.git-scm.com/
 * pro git book (libro creative commons tambien disponible impreso): http://progit.org/book
 * Para quien tenga experiencia previa con Subversion: http://git-scm.com/course/svn.html

Referencia

 * Manual de referencia: http://www.kernel.org/pub/software/scm/git/docs/
 * Y por supuesto, en linux, se puede acceder al manual de referencia con "man". Ej: "man git-commit"

Documentación en castellano

 * http://www-cs-students.stanford.edu/~blynn/gitmagic/intl/es/
 * http://www.rodolinux.com.ar/docs/Tutorial-de-GIT-Editado.pdf

Instalación
Lo primero, por supuesto, tener instalado git (http://git-scm.com/download).

Para Debian/Ubuntu: $ apt-get install git

Clonando el repositorio
Nos haremos con el repositorio del curso ejecutando:

$ git clone git://github.com/neodoo/curso_python_dga_11.git

Haciendo una rama propia
Cada alumno hará una rama propia del repositorio a fin de ir realizando las soluciones a los ejercicios propuestos:

$ git checkout -b alumnoXXXX # se crea la rama y se trabaja sobre ella

Haciendo cambios
 $ git add -A Se marcan todos los ficheros nuevos para que se pueda hacer commit de ellos $ git commit -a #Se añaden todos los cambios, y se hace commit $ git add  #Se añaden ficheros y cambios, pero no se hace commit todavía $ git add -i #Para añadir interactivamente $ git commit #hace commit de los cambios que se hayan añadido previamente con add

Más sobre ramas y merges
$ git checkout master #para volver a la rama principal $ git checkout alumnoXXXX #se vuelve a la rama del alumno $ git checkout -b rama_temporal_prueba # creación de otra rama, por ejemplo para realizar algún tipo de prueba  $ git checkout alumnoXXXX  $ git merge rama_temporal_prueba # estamos satisfechos con la prueba, mergeamos los cambios a alumnoXXXX

Comparando cambios y obteniendo información de revisiones
$ gitk # Herramienta gráfica para ver el estado y revisiones del repositorio $ git log # Muestra un log de cambios en la rama actual $ git show HEAD # muestra información sobre el último commit y el parche del mismo $ git diff #muestra los cambios que aún no se han añadido al índice con "git add" $ git diff --cached #muestra los cambios añadidos al índice pero que aun no se han "commiteado" $ git diff master...alumnoXXX #muestra cambios entre dos ramas

Guardando temporalmente cambios locales y aplicandolos despues
$ git stash # guarda en una pila los cambios que se tienen localmente sin añadir al índice y limpia el directorio de trabajo $ git stash pop # aplica el último juego de cambios que se hayan almacenado en el stash