Perder el miedo a git en 90 minutos
Upcoming SlideShare
Loading in...5
×
 

Perder el miedo a git en 90 minutos

on

  • 3,047 views

 

Statistics

Views

Total Views
3,047
Views on SlideShare
3,040
Embed Views
7

Actions

Likes
1
Downloads
36
Comments
0

2 Embeds 7

http://www.slideshare.net 6
http://www.linkedin.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Perder el miedo a git en 90 minutos Perder el miedo a git en 90 minutos Presentation Transcript

  • Perder el miedo a Git en 90 minutos ´ Adeodato Simo Zaragoza, 2009-02-20 Perder el miedo a Git en 90 minutos
  • Plan para esta hora y media • La revolucion de los SCM distribuidos: verdades y mentiras ´ • SCM distribuidos: cosas a tener en cuenta • Por que Git: caracter´sticas interesantes ´ ı • Pilares basicos de Git ´ • Tour por los comandos mas interesantes ´ • Preguntas Perder el miedo a Git en 90 minutos
  • ´ La revolucion de los SCM distribuidos • La gran mentira: La mayor ventaja de los SCM distribuidos es que tienes una copia local de la historia, y puedes hacer log y diff sin estar conectado. • Lo anterior es una caracter´stica conveniente, pero los ı verdaderos beneficios de los SCM distribuidos son: • Democratizacion de las herramientas ´ • Derecho a la intimidad y la higiene Perder el miedo a Git en 90 minutos
  • ´ La democratizacion de los SCM La metedura de pata de los SCM centralizados: hacer del nivel de acceso un discriminador clasista a nivel de herramienta ´ ´ La pregunta del millon: ¿por que mis contribuidores no pueden utilizar las mismas herramientas que yo, y para que puedan hacerlo, han de tener mi mismo nivel de acceso? ´ Caso ideal: tener acceso es un marron, y no una ventaja. (Tattoo that.) Perder el miedo a Git en 90 minutos
  • Nuevo orden de cosas • Los SCM distribuidos permiten a cualquier persona desarrollar en igualdad de condiciones • El como y cuando dar acceso es ahora una cuestion social o ´ ´ ´ ´ pol´tica, como siempre debio ser ı • Para los escepticos que digan: ¿realmente hay tanta diferencia ´ entre ”svn commit” y ”svn diff — mutt”? • Quiza no con Subversion, pero en los SCM distribuidos (y en ´ particular con Git) la diferencia se hace abismal Perder el miedo a Git en 90 minutos
  • El derecho a la intimidad y la higiene • En los SCM centralizados: • crear ramas ”impone”, pues todas han de ir al repositorio central, ´ ´ y seran visibles incluso si son abandonadas despues • no hay Ctrl-Z • Los SCM distribuidos: • permiten el desarrollo en privado • hay Ctrl-Z ilimitado en la copia local Perder el miedo a Git en 90 minutos
  • Particularidades de los SCM distribuidos • Indivisibilidad del arbol ´ • no hay checkouts parciales como en SVN • hace falta cirug´a y magia para dividir un repositorio en dos (y eso ı cuando es posible) • pero se pueden ”arrejuntar” repositorios • Indivisibilidad de la historia • se copia siempre toda la historia del proyecto a la maquina local ´ • existe funcionalidad para obtener solo una parte, pero el resultado ´ tiene limitaciones Perder el miedo a Git en 90 minutos
  • ´ ¿Por que Git? • Anecdota: mi historia y lo que le´ en un blog ´ ı • Ventajas: • riqueza • flexibilidad • velocidad • eficiencia espacial • ´ nivel de adopcion • Sobre la curva de aprendizaje... • no es tanto la complejidad de la herramienta • como, en muchos aspectos, el cambio de paradigma Perder el miedo a Git en 90 minutos
  • Git: algunas caracter´sticas ı • Disenado a lo Unix ˜ • un ejecutable distinto para cada tarea • estos se combinan entre s´ facilmente ´ ı´ • muchos no se usan normalmente (”plumbing”) • Sin miedo a romper paradigmas • el ”index” • ´ la cirug´a como accion cotidiana ı • una manera diferente de renombrar ficheros • ´ $PAGER por omision • Posibilidad de ignorar la magia y utilizarlo como un SCM ordinario Perder el miedo a Git en 90 minutos
  • Modelo de datos interno • Etiquetador ⇒ Tag • Flechas ⇒ Branches (flecha roja: HEAD) • Grafo ⇒ Commits • meta-informacion (incl. padre/s) ´ • tree • blob • tree • Concepto de ”committish” y ”treeish” • La copia de trabajo y su relacion con la rama ´ Perder el miedo a Git en 90 minutos
  • ´ Como referirse a los ”committish” • Formas basicas: ´ • SHA1: 9448a825ddb13c79a35e438c6d9d6bd485b66b52 • SHA1 abreviada: 9448a8 • nombres simbolicos (ramas y tags): HEAD, master, 0.9.2 ´ • Refiriendose a los padres: ´ • HEADˆ (el padre inmediato) • HEAD 1 (´dem) ı • HEAD 2 (el padre del padre, etc.) • Funcionalidad extra: HEAD@two weeks ago Perder el miedo a Git en 90 minutos
  • El index (I): commit en los SCM tradicionales • En una copia de trabajo en un SCM tradicional se diferencia entre: • (a) ficheros que el SCM conoce (via ‘svn add‘) • (b) ficheros que el SCM sabe que ha de ignorar • (c) ficheros de los que no sabe nada (limbo) • La operacion ”commit” automaticamente detecta cambios en los ´ ´ ´ ficheros (a), y crea una nueva revision con ellos: ‘svn commit‘ <--> (a) (b) |-> ignorados por ’’commit’’ (c) |/ Perder el miedo a Git en 90 minutos
  • El index (II): todo es limbo en Git • En Git, la operacion commit”no se interesa por el estado de los ´¸ ficheros en (a): • a efectos de commit”, todos los ficheros estan en el estado (c), en ´ ¸ el limbo • (otras operaciones como status y diff s´ pueden diferenciar entre ı los tres estados) • git commit decide que incluir en la revision mirando en un lugar ´ ´ especial... el index Git <--> Staging area <--> Limbo ------------ ----- Index Working dir Perder el miedo a Git en 90 minutos
  • ˜ El index (III): anadiendo cosas al index • Con ‘git add‘, todos los cambios a un fichero pasan al index: % edit foo.c % git add foo.c % git commit -m ’Arreglado no s´ qu´ en foo.c’ e e • Cuidado: % edit foo.c (#1) % git add foo.c % edit foo.c (#2) % git commit -m ’Cambios de #1 pero no de #2’ Perder el miedo a Git en 90 minutos
  • ´ El index (IV): interaccion ‘diff‘ y ‘status‘ • ‘git diff‘ a secas muestra las diferencias entre la copia de trabajo y el ´ndice: ı % edit foo.c % git add foo.c % git diff foo.c => Diff vac´o! ı • Optiones interesantes: % git diff --cached # HEAD <--> index % git diff HEAD # HEAD <--> working dir • Los tres estados de ‘git status‘ Perder el miedo a Git en 90 minutos
  • El index (y V): consejos y trucos finales • Elegir que cambios anadir hunk a hunk: ´ ˜ % git add -p [fichero] • Usos del index: • revisar codigo, de otros o de uno mismo (anadir al index lo ”ya ´ ˜ revisado”) • Fingir que el index no existe: % git commit -a % git diff HEAD Perder el miedo a Git en 90 minutos
  • Trabajar con ramas • Publicidad enganosa en SVN: ”Branching is O(1)” ˜ • Branchear en la justa medidai • Comandos: • git branch nueva rama • git checkout otra rama • ´ (¿que pasa con los non-committed cambios?) • git checkout -b nueva rama2 • ‘git merge‘: merges vs ”fast forwards” Perder el miedo a Git en 90 minutos
  • Repositorios locales y remotos • Copia inicial (git clone): • las ramas remotas se copian a ”origin/¡rama¿” • se crea una rama local (normalmente ”master”) • Actualizaciones sucesivas (git pull): • se reciben los datos, y se actualizan la ”tracking branches”, incluyendo la actual • Enviar (git push): • mapeo rama local <--> remota, y se actualizan • $PATH/repo/.git vs $PATH/repo.git Perder el miedo a Git en 90 minutos
  • La cirug´a privada, piedra angular de este SCM ı • Tambien denominada ”history rewriting”, pero no me gusta ese ´ nombre... • ¿Por que privada/en privado? ´ • Consecuencias de la cirug´a ı • Cosas que se pueden hacer: • Cambiar cualquier commit • ´ Unir dos o mas commits en uno • O dividir un commit en varios • Transplantar una serie de commits a otra rama Perder el miedo a Git en 90 minutos
  • Integridad en Git y secuelas de la cirug´a ı • Para dar nombres a las cosas, Git usa SHA1: • los objetos internos no tienen otro nombre que el SHA1 de su contenido • Es imposible cambiar algo en el repositorio y no cambiarle el nombre: git se quejar´a mucho ı • posibilita detectar corrupcion de disco ´ • si tienes un tag firmado, toda la historia que conduce a ese tag queda verificada • La cirug´a renombra todas las cosas que toca, y toda la ı descendencia de esas cosas Perder el miedo a Git en 90 minutos
  • Herramientas para la cirug´a ı • Editar el ultimo commit: git commit –amend ´ • Editar commits ”enterrados”, unir o dividir commits: git rebase -i • Transplantar historia: git rebase, git pull –rebase • Desechar commits: git reset, que viene en tres sabores: • –soft • –mixed • –hard (cuidado!) • y dos modelos (con y sin argumentos) Perder el miedo a Git en 90 minutos
  • git reset (cont.) • Sin argumentos, pone el estado al ultimo commit: ´ ´ % git reset => resetea el ındice % git reset --hard => desechar todos los cambios locales • Con argumentos, pone el estado al commit especificado: • Para solo ”resetear” un fichero... ´ • git checkout FILE (muy intuitivo...) Perder el miedo a Git en 90 minutos
  • Descubriendo git log • Cosas basicas: ´ % git log --name-status % git log -p • El motor de busqueda: ´ % git log --author=’John Doe’ % git log --grep=’playlist’ % git log -S’nombre_de_una_funcion’ Perder el miedo a Git en 90 minutos
  • Otros comandos % git show $committish % git reflog % git stash % git format-patch % git archive % git clean % git gc % git config • Ficheros: /.gitconfig, $REPO/.git/config • Herramientas graficas: gitk, gitg, ... ´ • Otras: git-svn; /bin/git-¡tu comando¿ • Hooks Perder el miedo a Git en 90 minutos
  • Escribir commit messages | Incluir una l´nea de sumario, corta y ı | | Luego una l´nea en blanco, y el resto de la ı | descripci´n, en tantos p´rrafos como haga o a | falta. • ¿Por que as´? ¿Es obligatorio? ´ı Perder el miedo a Git en 90 minutos
  • ¿Preguntas? Perder el miedo a Git en 90 minutos