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
o si quieres
¿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
(el servidor central)
del repositorio
con varios repositorios remotos, distintos
usuarios y distintos equipos
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>
<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