Curso Python DGA 2011/control 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 github

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.

Uso del repositorio del curso y primeros pasos con git
Para la entrega y completado de los ejercicios del curso, los alumnos tendrán que crearse un "fork" o copia propia del repositorio del curso, que se encuentra en github. Para ello tendrán que crearse su propia cuenta en github.

Sobre su copia, los alumnos completarán los archivos o añadir los necesarios en cada tarea propuesta, haciendo "push" (subir cambios) a su repositorio de github. Luego, deberán mandar a los profesores del curso el link a su repositorio de github.

Creación de cuenta en github
La creación de cuentas en github es gratuita para repositorios públicos, como en nuestro caso. https://github.com/signup/free

github ofrece dos tipos de acceso lectura/escritura a nuestros repositorios: En la web de github existe una ayuda paso a paso tanto para instalar git como para configurar las claves. Dicha ayuda existe para Linux Windows  y OSX
 * Acceso por https: No hace falta configurar nada, con la contraseña de nuestra cuenta github es suficiente. No obstante es más cómodo para trabajar con el acceso por ssh, evitamos tener que introducir contraseñas cuando queremos subir al repositorio en github.
 * Acceso por ssh: Para poder tener acceso de escritura desde el equipo del alumno al repositorio en github, es necesario configurar las "claves ssh públicas" desde el menú "Account settings", en la cuenta de github que hemos creado via web.

Instalación de git en máquina local
Si no lo has hecho ya durante el paso anterior, instala git (http://git-scm.com/download).

Para Debian/Ubuntu: $ apt-get install git

Haciendo un "fork" propio del repositorio del curso
Para ello, estando loggeados en la web de github con nuestra nueva cuenta, ir al repositorio del curso: https://github.com/neodoo/curso_python_dga_11. A continuación pulsaremos en el botón de "fork" como se muestra en la siguiente imagen:

Imagen:Curso_dga_11_github_fork.png

Clonando (obteniendo) el repositorio
Ya tenemos nuestro propio repositorio en github. Para obtenerlo y poder empezar a trabajar sobre el:

$ git clone https://nombre_cuenta_alumno@github.com/nombre_cuenta_alumno/curso_python_dga_11.git
 * Si accedemos por https:

$ git clone git://github.com:nombre_cuenta_alumno/curso_python_dga_11.git
 * Si accedemos por ssh (antes se han tenido que configurar las claves ssh)

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

Ojo, esto hace cambios en nuestro repositorio EN nuestro equipo, no en el repositorio de github.

Subiendo cambios al repositorio github
$ git push

Al hacer esto, se transmitirán todos los cambios que hayamos ido haciendo al repositorio (en realidad lo que hacemos es mergear nuestros cambios locales con el repositorio github).

Ramas y merges
La rama principal en git es master, pero podemos crear otras y hacer cambios y merges entre ellas.

$ git checkout -b nombrerama # se crea la rama y se trabaja sobre ella $ git checkout master #para volver a la rama principal $ git checkout nombrerama #se vuelve a la rama creada $ git checkout -b rama_temporal_prueba # creación de otra rama, por ejemplo para realizar algún tipo de prueba  $ git checkout nombrerama $ git merge rama_temporal_prueba # estamos satisfechos con la prueba, mergeamos los cambios a nombrerama

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...nombrerama #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

Para más información, consulta la documuentación que se describe a continuación.

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