Control de versiones: GIT

De WikiEducator
Saltar a: navegación, buscar


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 [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.


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 [2]. 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:

  • 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.

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 [3] Windows [4] y OSX [5]


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:

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:

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

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

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).


Más sobre git

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
<cambios en rama_temporal_prueba>
$ git checkout nombrerama
<cambios en 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)

Referencia

Documentación en castellano