36
--- +++

Git para-principiantes

Embed Size (px)

DESCRIPTION

Git para principiantes, creada por Daniel Rodríguez Troitiño y presentada el 21 de septiembre de 2011 en el Hub de Madrid

Citation preview

Page 1: Git para-principiantes

---+++

Page 2: Git para-principiantes

¿QUÉ ES GIT?

Lo primero que nos preguntamos es qué es exactamente Git.

Page 3: Git para-principiantes

Git es un sistema de control de versiones distribuido de código

abierto diseñado para ser rápido y eficiente

- Un sistema de control de versiones permite a sus usuarios almacenar revisiones diferentes de un mismo archivo y compararlas, restaurarlas y, a veces, mezclarlas.

Page 4: Git para-principiantes

¿POR QUÉ GIT?

Page 5: Git para-principiantes

No es Subversion(o CVS, o RCS, o copiar directorios)

- Subversion fue creado hace más de diez años como evolución de CVS (que era una evolución de RCS), pero al intentar ser una evolución, era un simple “parche” de su padre.

Page 6: Git para-principiantes

Garantiza la integridad de los datos

Git utiliza hashes SHA1 y en ocasiones criptografía para garantizar que todo el mundo tiene los mismos datos y que estos no han sido modificados sin el conocimiento de los usuarios. Quizá para un desarrollo personal esto no tenga sentido, pero para proyectos open source y empresas sí lo tiene.

Page 7: Git para-principiantes

Sin repositorio central

Frente a SCM antiguos Git no necesita de un repositorio central o canónico, aunque tampoco impide designar uno de los clones del repositorio como canónico. Esto permite una flexibilidad imposible con otros sistemas, y muchas ventajas.

Page 8: Git para-principiantes

Cada usuario tiene un backup completo del repositorio

Los repositorios de cada usuario son un clon completo, y no una copia parcial de la última versión. En el caso de fallo catastrófico de un supuesto repositorio central, no es necesario más que clonar un repositorio de uno de los usuarios.

Page 9: Git para-principiantes

Se puede trabajar offline

El disponer de un repositorio completo, un usuario puede realizar todas las operaciones que desee con su copia local, y sincronizarla con otras copias cuando vuelva a estar conectado.

Page 10: Git para-principiantes

¡Es rápido!

Al realizar todas las operaciones en local, no es necesario esperar al servidor para ver un log de cambios, comparar con una versión anterior y otras operaciones.

Page 11: Git para-principiantes

PRIMEROS PASOS

Page 12: Git para-principiantes

Si habéis instalado Xcode 4 ya disponéis de un Git suficiente moderno para utilizar, y no hay que hacer mucho más.Personalmente el soporte de Xcode 4 me parece de broma. La vista de comparar versiones es la única que posiblemente se salva, y no es tan buena. Ni siquiera es capaz de manejar muy bien conflictos en el archivo de proyecto, lo que hace que el 50% de la veces casque.

Page 13: Git para-principiantes

GITX (L)http://gitx.laullon.com

Mi recomendación es utilizar la Terminal y GitX. GitX es un cliente gráfico para Git, muy bien enfocado y sencillo. No puede hacer todas las cosas, pero las que hace, las hace muy bien.Hay muchas versiones de GitX. La original está más o menos abandonada. Luego apareció la de brotherbard, y la que utilizo últimamente es la de Laullón.

Page 14: Git para-principiantes

Esta es la vista de para hacer commits. Cuando trabajo con Xcode siempre mantengo una terminal en el directorio por si necesito teclear algún comando y GitX con el proyecto abierto.

Page 15: Git para-principiantes

INSTALACIÓNhttp://git-scm.com

Si queréis una versión más moderna podeis instalar Git desde el código fuente o un sistema de paquetes como Homebrew.

Page 16: Git para-principiantes

$ git config --global user.name "Juan Pérez"

$ git config --global user.email [email protected]

Algo que no he encontrado como hacer en Xcode. Esto toca hacerlo en el Terminal. Sólo es necesario hacerlo una vez.

Page 17: Git para-principiantes

$ git config --global core.editor "mate -w" # o "nano -w" # o "emacs" # o "vim"

Otras configuraciones globales si os gusta trabajar en la terminal es elegir el editor que Git invocará cuando necesite que editeis algún mensaje de commit o similares…

Page 18: Git para-principiantes

$ git config --global merge.tool opendiff

Y la herramienta que utilizará para mostrar las mezclas conflictivas (opendiff es una herramienta gráfica que se instala con Xcode)

Page 19: Git para-principiantes

$ git config --global color.ui auto

Y finalmente para darle un toque de color a esa triste terminal.

Page 20: Git para-principiantes

UN WORKFLOW

Hay muchos posibles workflows con Git. Cada uno adecuando a un modo de desarrollar y a un tipo de equipo. El kernel de Linux no utiliza repositorio centrales y forma una especie de pirámide de responsables y utiliza “pull requests” mediante el correo electrónico. En empresas lo normal es un repositorio central. Y hay muchas más. Git te da la libertad de diseñar tu propio workflow.

Page 21: Git para-principiantes

$ mkdir PajaritosCabreados; cd PajaritosCabreados$ git initInitialized empty Git repository in /Users/daniel/PajaritosCabreados/.git/$

GIT INIT

Desde la terminal crear un repositorio es tan sencillo como crear un directorio y ejecutar “git init” dentro de él. Git creará un directorio oculto dónde almacenará toda la información que él necesite.

Page 22: Git para-principiantes

Desde Xcode, cuando se crea un nuevo proyecto y vamos a elegir un directorio para almacenarlo se puede elegir crear un repositorio para el proyecto. A menos de que tengáis una razón muy buena, todos los nuevos proyectos deberían estar bajo control de versiones, aunque simplemente sea local.

Page 23: Git para-principiantes

Vamos a crear nuestro primer archivo, en el que incluiremos algún contenido.

Page 24: Git para-principiantes

$ git status# On branch master## Initial commit## Untracked files:# (use "git add <file>..." to include in what will be committed)## main.mnothing added to commit but untracked files present (use "git add" to track)$

GIT STATUS

Desde la terminal, en cualquier momento podemos ejecutar “git status” para comprobar en que estado están nuestros archivos. Git incluye mucha información en él: la rama en la que estamos, el número de commits por delante o por detrás de la rama del repositorio remoto,… pero sobre todo el estado de los archivos. En este momento lo que nos dice es que hay un archivo main.m del que no sabe nada.

Page 25: Git para-principiantes

$ git add main.m$

GIT ADD

La primera orden a aprender es “git add”. Git no incluye ningún contenido al repositorio al que no hayamos hecho un “git add”. La forma más normal es “git add nombre.archivo”, que añade todos los cambios del archivo al “staging area” de Git.

Page 26: Git para-principiantes

$ git status# On branch master## Initial commit## Changes to be committed:# (use "git rm --cached <file>..." to unstage)## new file: main.m#$

Si ejecutamos “git status” a continuación veremos que Git lo marca como “new file”.

Page 27: Git para-principiantes

Pero me he dado cuenta de que me faltaba una pequeña cosa, así que voy a editar de nuevo el archivo y añadir una línea más.

Page 28: Git para-principiantes

$ git status# On branch master## Changes to be committed:# (use "git rm --cached <file>..." to unstage)## new file: main.m## Changed but not updated:# (use "git add <file>..." to update what will be committed)# (use "git checkout -- <file>..." to discard changes in working directory)## modified: main.m#$

En este momento si ejecutamos “git status” veremos algo curioso: un archivo está en dos estados para Git: nuevo y modificado. Esta es una de las principales diferencias de Git, y una de sus mejores características. Git no sigue a los archivos, sino a los contenidos; y el archivo main.m tiene un contenido que hemos añadido al “staging area”, pero otro contenido (la línea de la anterior diapositiva) que no, así que considera que el archivo está modificado. Podemos añadir esa línea haciendo otro “git add”.

Page 29: Git para-principiantes

GIT COMMIT

$ git commit

Finalmente, para crear una nueva revisión se ejecutará “git commit”, que toma todos los cambios del “staging area” y crea una revisión con ellos. Ningún cambio en el directorio de trabajo que no esté en el “staging area” se incluirá en la revisión.

Page 30: Git para-principiantes

Git nos abrirá nuestro editor de texto dónde podremos escribir una pequeña descripción del cambio realizado y sus motivos.

Page 31: Git para-principiantes

GIT COMMIT

$ git commit[master (root-commit) 9108af0] Main function 1 files changed, 8 insertions(+), 0 deletions(-) create mode 100644 main.m$

Page 32: Git para-principiantes

…RINSE AND REPEAT

Ya solo queda repetir el proceso de modificar los archivos, añadir los cambios al “staging area” y crear las nuevas revisiones.

Page 33: Git para-principiantes

¡AYUDA!

Git es muy amplio, esto es el proceso más sencillo y habitual, pero falta mucho por explicar como los remotos, las ramas y muchas otras cosas.Si necesitáis ayuda tenéis varios recursos a vuestra disposición.

Page 34: Git para-principiantes

$ git help <orden>

$ git <orden> --help

El primero es la ayuda en línea de Git. Con “git help” o “git --help” se pueden leer las páginas de manual de Git. Las páginas de los mandatos básicos están muy bien redactadas e incluyen ejemplos en la parte final.

Page 35: Git para-principiantes

DOCUMENTACIÓNhttp://git-scm.com/documentation

Si preferís Internet el sitio de Git incluye mucha documentación y enlaces a tutoriales propios y externos.

Page 36: Git para-principiantes

PRO GIThttp://progit.org

Finalmente existe Pro Git, un libro gratuito que trata Git desde novato a experto. Existe una versión en ePub muy bien preparada para el iPad.