SlideShare una empresa de Scribd logo
1 de 26
Descargar para leer sin conexión
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

Más contenido relacionado

Similar a Perder el miedo a git en 90 minutos

Impresoras3 d tecnologia
Impresoras3 d tecnologiaImpresoras3 d tecnologia
Impresoras3 d tecnologia
ITGT
 
026 Estado Del Arte De Mdd Model Driven Development
026 Estado Del Arte De Mdd Model Driven Development026 Estado Del Arte De Mdd Model Driven Development
026 Estado Del Arte De Mdd Model Driven Development
GeneXus
 

Similar a Perder el miedo a git en 90 minutos (20)

Las reglas que hay que romper para que tu equipo de desarrollo sea el más RÁPIDO
Las reglas que hay que romper para que tu equipo de desarrollo sea el más RÁPIDOLas reglas que hay que romper para que tu equipo de desarrollo sea el más RÁPIDO
Las reglas que hay que romper para que tu equipo de desarrollo sea el más RÁPIDO
 
Manual de impresión
Manual de impresiónManual de impresión
Manual de impresión
 
Conociendo GIT, herramienta para control de versiones
Conociendo GIT, herramienta para control de versionesConociendo GIT, herramienta para control de versiones
Conociendo GIT, herramienta para control de versiones
 
Scrum para uno
Scrum para unoScrum para uno
Scrum para uno
 
Bantaba
BantabaBantaba
Bantaba
 
Git with gifs
Git with gifsGit with gifs
Git with gifs
 
Cómo volarle la peluca a tus usuarios con la velocidad de tu sitio?
Cómo volarle la peluca a tus usuarios con la velocidad de tu sitio?Cómo volarle la peluca a tus usuarios con la velocidad de tu sitio?
Cómo volarle la peluca a tus usuarios con la velocidad de tu sitio?
 
Deep Learning, Python, C# y Azure
Deep Learning, Python, C# y AzureDeep Learning, Python, C# y Azure
Deep Learning, Python, C# y Azure
 
Reglas de Código Simple
Reglas de Código SimpleReglas de Código Simple
Reglas de Código Simple
 
Impresoras3 d tecnologia
Impresoras3 d tecnologiaImpresoras3 d tecnologia
Impresoras3 d tecnologia
 
026 Estado Del Arte De Mdd Model Driven Development
026 Estado Del Arte De Mdd Model Driven Development026 Estado Del Arte De Mdd Model Driven Development
026 Estado Del Arte De Mdd Model Driven Development
 
Bindiffing patches
Bindiffing patchesBindiffing patches
Bindiffing patches
 
Nerdear.la 2018 | Journey to Stability - Cómo reducimos costos y aumentamos l...
Nerdear.la 2018 | Journey to Stability - Cómo reducimos costos y aumentamos l...Nerdear.la 2018 | Journey to Stability - Cómo reducimos costos y aumentamos l...
Nerdear.la 2018 | Journey to Stability - Cómo reducimos costos y aumentamos l...
 
Automatización Continua
Automatización ContinuaAutomatización Continua
Automatización Continua
 
Presentación nuevas técnicas de prototipado rápido Ing Lina María Amaya G IMOCON
Presentación nuevas técnicas de prototipado rápido Ing Lina María Amaya G IMOCONPresentación nuevas técnicas de prototipado rápido Ing Lina María Amaya G IMOCON
Presentación nuevas técnicas de prototipado rápido Ing Lina María Amaya G IMOCON
 
Charla SQlite Salta
Charla SQlite SaltaCharla SQlite Salta
Charla SQlite Salta
 
Solid Day - Cloudino
Solid Day - CloudinoSolid Day - Cloudino
Solid Day - Cloudino
 
ITI Presentacion Eclipse Day
ITI Presentacion Eclipse DayITI Presentacion Eclipse Day
ITI Presentacion Eclipse Day
 
9 PASOS PARA GENERAR EL CÓDIGO CNC CON SOLIDWORKS CAM - Easyworks.pdf
9 PASOS PARA GENERAR EL CÓDIGO CNC CON SOLIDWORKS CAM - Easyworks.pdf9 PASOS PARA GENERAR EL CÓDIGO CNC CON SOLIDWORKS CAM - Easyworks.pdf
9 PASOS PARA GENERAR EL CÓDIGO CNC CON SOLIDWORKS CAM - Easyworks.pdf
 
Git 101+
Git 101+Git 101+
Git 101+
 

Último

redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
nicho110
 

Último (12)

Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptx
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXI
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 

Perder el miedo a git en 90 minutos

  • 1. Perder el miedo a Git en 90 minutos ´ Adeodato Simo Zaragoza, 2009-02-20 Perder el miedo a Git en 90 minutos
  • 2. 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
  • 3. ´ 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
  • 4. ´ 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
  • 5. 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
  • 6. 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
  • 7. 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
  • 8. ´ ¿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
  • 9. 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
  • 10. 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
  • 11. ´ 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
  • 12. 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
  • 13. 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
  • 14. ˜ 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
  • 15. ´ 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
  • 16. 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
  • 17. 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
  • 18. 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
  • 19. 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
  • 20. 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
  • 21. 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
  • 22. 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
  • 23. 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
  • 24. 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
  • 25. 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
  • 26. ¿Preguntas? Perder el miedo a Git en 90 minutos