Diferencia entre revisiones de «Curso Python DGA 2011/control versiones git»

De WikiEducator
Saltar a: navegación, buscar
(Cambio de control de versiones a zona de intro)
 
 
Línea 1: Línea 1:
 
{{MiTitulo| Control de versiones: GIT}}
 
{{MiTitulo| Control de versiones: GIT}}
  
Durante el desarrollo del curso vamos a hacer uso de un sistema de control de versiones, concretamente [http://git-scm.com/ GIT]. Buena parte de ejemplos y ejercicios estarán alojados en un repositorio de [https://github.com/neodoo/curso_python_dga_11]
+
Durante el desarrollo del curso vamos a hacer uso de un sistema de control de versiones, concretamente [http://git-scm.com/ GIT]. Buena parte de ejemplos y ejercicios estarán alojados en un repositorio de github [https://github.com/neodoo/curso_python_dga_11]
  
 
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.
 
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 ==
+
== Uso del repositorio del curso y primeros pasos con git ==
  
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)
+
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 [http://www.github.com]. Para ello tendrán que crearse su propia cuenta en github.
+
* 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
+
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.
* git community book: http://book.git-scm.com/
+
Luego, deberán mandar a los profesores del curso el link a su repositorio de github.
* 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 ==
+
=== Creación de cuenta en github ===
* 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 ==
+
La creación de cuentas en github es gratuita para repositorios públicos, como en nuestro caso.
 +
https://github.com/signup/free
  
* http://www-cs-students.stanford.edu/~blynn/gitmagic/intl/es/
+
github ofrece dos tipos de acceso lectura/escritura a nuestros repositorios:
* http://www.rodolinux.com.ar/docs/Tutorial-de-GIT-Editado.pdf
+
* '''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 [http://help.github.com/linux-set-up-git/] Windows [http://help.github.com/win-set-up-git/] y OSX [http://help.github.com/mac-set-up-git/]
  
== Uso del repositorio del curso y primeros pasos con git ==
 
  
=== Instalación ===
+
=== Instalación de git en máquina local ===
Lo primero, por supuesto, tener instalado git (http://git-scm.com/download).
+
Si no lo has hecho ya durante el paso anterior, instala git (http://git-scm.com/download).
  
 
Para Debian/Ubuntu:
 
Para Debian/Ubuntu:
 
  $ apt-get install git
 
  $ 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 un "fork" propio del repositorio del curso ===
  
=== Haciendo una rama propia ===
+
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.
Cada alumno hará una rama propia del repositorio a fin de ir realizando las soluciones a los ejercicios propuestos:
+
A continuación pulsaremos en el botón de "fork" como se muestra en la siguiente imagen:
  
  $ git checkout -b alumnoXXXX # se crea la rama y se trabaja sobre ella
+
[[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 ===
 
=== Haciendo cambios ===
Línea 53: Línea 55:
 
  $ git commit #hace commit de los cambios que se hayan añadido previamente con add
 
  $ git commit #hace commit de los cambios que se hayan añadido previamente con add
  
=== Más sobre ramas y merges ===
+
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 master #para volver a la rama principal
  $ git checkout alumnoXXXX #se vuelve a la rama del alumno
+
  $ 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 -b rama_temporal_prueba # creación de otra rama, por ejemplo para realizar algún tipo de prueba
 
  <cambios en rama_temporal_prueba>
 
  <cambios en rama_temporal_prueba>
  $ git checkout alumnoXXXX
+
  $ git checkout nombrerama
  <cambios en alumnoXXXX>
+
  <cambios en nombrerama>
  $ git merge rama_temporal_prueba # estamos satisfechos con la prueba, mergeamos los cambios a alumnoXXXX
+
  $ git merge rama_temporal_prueba # estamos satisfechos con la prueba, mergeamos los cambios a nombrerama
  
 
=== Comparando cambios y obteniendo información de revisiones ===
 
=== Comparando cambios y obteniendo información de revisiones ===
Línea 69: Línea 83:
 
  $ git diff #muestra los cambios que aún no se han añadido al índice con "git add"
 
  $ 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 --cached #muestra los cambios añadidos al índice pero que aun no se han "commiteado"
  $ git diff master...alumnoXXX #muestra cambios entre dos ramas
+
  $ git diff master...nombrerama #muestra cambios entre dos ramas
  
 
=== Guardando temporalmente cambios locales y aplicandolos despues ===
 
=== 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 # 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
 
  $ 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

Última revisión de 08:18 9 sep 2011


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