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 [1]
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.
Contenido
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
Uso del repositorio del curso y primeros pasos con git
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
<Añadimos o modificamos ficheros> $ 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 <fichero(s)> #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 <cambios en rama_temporal_prueba> $ git checkout alumnoXXXX <cambios en 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