Introducción
a Git


Meetup: Desarrolladores 
de Hellín y alrededores 

@gruizdevilla
@adesis


 

$ whoami




$ aboutthis

Gonzalo Ruiz de Villa
@gruizdevilla

Cofundador y trabajador en @adesis


Esta presentación se preparó para el meetup de desarrolladores de Hellin de introducción a Git.



¿Qué necesitas tener preparado?


Instálate Git

http://git-scm.com/


Un cliente fantástico: SourceTree

http://www.sourcetreeapp.com/

Create una cuenta en un servicio online



https://github.com



o si quieres




https://bitbucket.com


 

¿Qué es Git?



Git es un sistema de control de versiones distribuido gratuito y de código abierto diseñado para gestionar todo desde un proyecto pequeño a un proyecto muy grande con rapidez y eficiencia.

Sistema de control de versiones



Registrar los cambios de un fichero o un conjunto de ficheros a lo largo del tiempo con la posibilidad de recuperar alguna versión más tarde.

Sistema de versiones local



Sistema de control de versiones centralizado



Sistema de control de versiones descentralizado


Ventajas de la descentralización


  • Se elimina el punto único de fallo
    (el servidor central)
  • Cada checkout es una copia completa
    del repositorio
  • Se puede colaborar simultáneamente 
    con varios repositorios remotos, distintos
    usuarios y distintos equipos

DCVS: Git, Mercurial, Bazaar, Darcs

Configura tu entorno


Configuración global

 
 $ git config --global user.name "Bruce Wayne"
 $ git config --global user.email bruce.wayne@wayneindustries.com

Configuración local de un proyecto, sin --global

 
$ git config user.name "Batman"
$ git config user.email batman@superheroes.org
    




Consiguiendo un repositorio




Crealo!





git init



                      $ touch viaje.txt
  windows:    echo.>viaje.txt
                      $ git init

Analicemos lo que aparece


$ tree -a
(tree /f)




$ git add .




$ git commit -m 'primer commit'

Analicemos lo que aparece


$ tree -a
(tree /f)




Clónalo




git clone




$ git clone git://github.com/gonzaloruizdevilla/meetuphellin.git




El flujo de trabajo básico



Editar ficheros

Registrar (stage) los cambios

Revisar los cambios

Aplicar (commit) los cambios


Tres zonas:


  • área de trabajo

  • área de staging (index)

  • repositorio




1. Edita los ficheros

(con tu editor favorito)

nano viaje.txt
edit viaje.txt
...


Revisa que cambios llevas


$ git status



Agrega los cambios al "staging area"


$ git add viaje.txt


Revisa:

$ git status






Hay que "stagear" o registrar los cambios antes de aplicarlos.




 $ git commit 

Flujo de trabajo habitual


Editar
Stage/almacenar (git add)
Revisar (git status)
Aplicar (git commit)




Acelerando

$ git commit -a



Enviando varios cambios de golpe. Múltiples:

 git add



Revisar los cambios individuales


$ git diff


¿Qué está "staged"?


git diff --cached




Revisando la historia



$ git log

$ git log --oneline

Y muchas más opciones de visualización.




Branches y merges

Ramas y fusiones

Listado de ramas

$ git branch

Crear rama

$ git branch experimento

Cambiar de rama

$git checkout experimento

(n veces) $ git commit 

Los commits afectan solo a la nueva rama

$ git checkout master

Volvemos a la rama "master" en la posición en la que la dejamos.

(n veces) $ git commit


Las ramas divergen y en algún momento querremos fusionar los desarrollos:

$ git checkout <rama-destino>
$ git merge <rama-origen>




¿Por qué?




Puedes probar cosas nuevas




Aislar unidades de trabajo




Separar líneas de trabajo que duren mucho tiempo




Visualizar las ramas de trabajo

$ git log --online --graph




Stash



Guardando cambios pendientes

$ git stash




Listado de cambios almacenados
$ git stash list

Aplicar cambios
$git stash apply

Más opciones:
save, list, drop, pop, apply, branch




Repositorios remotos




Puedes trabajar con múltiples repositorios remotos.

Crea tu repositorio en GitHub




Listamos repositorios

$ git remote

Agregamos la referencia

$ git remote add origin https://github.com/tuusuario/meetuphellin.git



Para subir cambios los empujamos (push) a una rama de un repositorio

$ git push origin master


El "tracking" de un repositorio se activa con el primer push, luego hay que escribir menos:

$ git remote show origin

$ git push




Flujo: fetch, pull, push


Fetch: importa los commits del repositorio remoto (no los aplica)


$ git fetch origin

$ git branch -a


Pull: fetch + merge


$ git pull origin






Muy habitual usar --rebase para conseguir una historia más lineal y evitar merges:

$ git pull --rebase origin


Push: enviar los cambios al repositorio remoto

$ git push origin master



Trabajar en equipo


Hay muchos repositorios remotos:


  • el/los repositorio(s) principal(es)
  • los repositorios públicos de cada unos de los miembros del equipo

Flujos de trabajo en equipo






Tagging/Etiquetando



Etiquetado de snapshots

$ git tag v1.0


Tags anotados 

(Annotated tags)


$ git tag -a v1.2 -m "la version 1.2"




Compartir tags: subir tags a un repositorio compartido

$ git push --tags




Git Blame

Quién y cuando se modificó cada línea de un fichero





$git blame viaje.txt




Reescribiendo la historia



Reescribiendo el último commit

$ git commit --amend

Rebase

Cambiando la base

$git rebase master





Sourcetree




http://www.sourcetreeapp.com/

GitHub

https://github.com


Bitbucket

https://bitbucket.org/



Ciclo de desarrollo






Consejos para buenos commits

Contenido del commit para subir a repositorios centralizados/compartidos

  • El commit mejora la funcionalidad
  • Contiene tests unitarios
  • Contiene la documentación relevante
  • Ha sido testado
  • Se ha hecho rebase
  • Los commits llevan un único cambio lógico/funcional/carácteristica/fix cada úno
  • El mensaje es correcto:

Formato del mensaje
del commit:


<tipo>(<ámbito>): <asunto>
<LÍNEA EN BLANCO>
<cuerpo del mensaje>
<LÍNEA EN BLANCO>
<pie del mensaje>

tipos habituales: feat(feature/nueva característica), fix, doc (documentación), style, refactor, test (si faltaban tests), chore (tareas de mantenimiento)

Title

Referencias


  • http://librosweb.es/pro_git/
  • http://charliedontcode.com/programacion/2011/11/27/tutorial-de-git-en-espanol.html
  • http://blog.xenodesystems.com/2012/05/tutorial-git-desde-cero.html
  • http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=githubFirstStepsUploadProject
  • http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=git-branch-bash




¡Gracias!

¿Preguntas?

Introducción a Git

By Gonzalo Ruiz de Villa

Introducción a Git

Breve introducción a Git. Presentación preparada en el Meetup de Desarrolladores de Hellín

  • 42,039