Diapositivas curso entendiendo_git

73
cursodegit.com aprendegit.com Diapositivas del curso "Entendiendo git" porcursodegit.com se encuentra bajo una Licencia Creative Commons Atribución-NoComercial-CompartirIgual 3.0 Unported . Entendiendo git [email protected] @cursodegit Nuestro blog : www.aprendegit.com @aprendegit Alfonso Alba García @aalbagarcia jueves, 4 de abril de 13

description

Diapositivas utilizadas durante el curso "Entendiendo git". Cuando un equipo de desarrollo y/o diseño trabaja de verdad en equipo, una herramienta como git se hace imprescindible. Trabajaréis con la tranquilidad y seguridad de saber que siempre podréis volver atrás, sabréis qué ha pasado con el código, controlaréis quién y cuándo lo ha modificado y reduciréis el tiempo dedicado al mantenimiento del mismo. Aunque la flexibilidad de git permite que lo adaptéis a vuestro flujo de trabajo sin grandes dificultades, será git el que acabe por cambiar vuestra forma trabajar, tanto si trabajáis solos como si lo hacéis en equipo. Objetivos: Entender el funcionamiento interno de git, ser capaces de comprender el grafo de evolución de un proyecto, entender qué es una rama y una etiqueta (¿hay alguna diferencia?), entender qué son los repositorios y ramas remotas y aprender a trabajar en equipo a través de un servidor central (github/bitbucket). Dirigido a: Programadores, diseñadores, maquetadores y administradores de sistemas que quieran mejorar el control sobre el código fuente, la gestión de sus ficheros de configuración o versionar, en general, cualquier fichero de texto plano. No se requiere ningún conocimiento previo de git o cualquier otro sistema de control de código. Temario: Tema 1: Introducción ¿Por qué usar un sistema de control de código? Un poco de teoría Cómo instalar Git en Mac, Windows y Linux Herramientas visuales para trabajar con git Tema 2: Trabajando con Git Crear o clonar un repositiorio Controlando los cambios que hacemos en el código Revisando el histórico de nuestro repositorio Me he equivocado ¿qué hago? Etiquetas Tema 3: Ramas ¿Para qué necesito las ramas? Branching y Merging Resolución de conflictos Ejemplo de flujos de trabajo Ramas remotas Volver a un estado anterior Tema 4: Repositorios remotos ¿Para qué necesitamos un servidor? Trabajando con repositorios remotos Pull y push a fondo Trabajando con ramas remotas Pull requests Tema 5: Trabajo en equipo Trabajando con múltiples repositorios remotos Compartir nuestro repositorio con otras personas Trabajando en equipo Resolución de conflictos Flujos de trabajo

Transcript of Diapositivas curso entendiendo_git

Page 3: Diapositivas curso entendiendo_git

cursodegit.com aprendegit.comDiapositivas del curso "Entendiendo git" porcursodegit.com se encuentra bajo una Licencia Creative Commons Atribución-NoComercial-CompartirIgual 3.0 Unported.

¿Qué nos permite git?

Auditoría del código:

Saber qué ha pasado y cuando

Saber quién lo ha hecho

jueves, 4 de abril de 13

Page 4: Diapositivas curso entendiendo_git

cursodegit.com aprendegit.comDiapositivas del curso "Entendiendo git" porcursodegit.com se encuentra bajo una Licencia Creative Commons Atribución-NoComercial-CompartirIgual 3.0 Unported.

¿Qué nos permite git?

Desarrollo ágil:

Es sencillo crear espacios para probar cosas sin que interrumpa nuestro flujo de trabajo normal

Es sencillo cambiar de un tema a otro

Refactoring es más sencillo

Se integra a la perfección con la metodología TDD

jueves, 4 de abril de 13

Page 5: Diapositivas curso entendiendo_git

cursodegit.com aprendegit.comDiapositivas del curso "Entendiendo git" porcursodegit.com se encuentra bajo una Licencia Creative Commons Atribución-NoComercial-CompartirIgual 3.0 Unported.

¿Qué nos permite git?

Gestión de errores:

Dar marcha atrás cuando nos equivocamos

Volver a un punto anterior del desarrollo

jueves, 4 de abril de 13

Page 6: Diapositivas curso entendiendo_git

cursodegit.com aprendegit.comDiapositivas del curso "Entendiendo git" porcursodegit.com se encuentra bajo una Licencia Creative Commons Atribución-NoComercial-CompartirIgual 3.0 Unported.

¿Qué nos permite git?

Control de código:

Saber qué se ha entregado al cliente

Saber qué se ha desplegado en producción

Saber en qué estado está el desarrollo de una determinada característica

jueves, 4 de abril de 13

Page 7: Diapositivas curso entendiendo_git

cursodegit.com aprendegit.comDiapositivas del curso "Entendiendo git" porcursodegit.com se encuentra bajo una Licencia Creative Commons Atribución-NoComercial-CompartirIgual 3.0 Unported.

¿Qué nos permite git?

Trabajo en equipo:

Optimiza y permite el trabajo distribuido de equipos de muchas personas

Extremadamente flexible: se implementa casi cualquier flujo de trabajo, aunque lo normal es que git te los optimice y los tengas que cambiar...

jueves, 4 de abril de 13

Page 12: Diapositivas curso entendiendo_git

cursodegit.com aprendegit.comDiapositivas del curso "Entendiendo git" porcursodegit.com se encuentra bajo una Licencia Creative Commons Atribución-NoComercial-CompartirIgual 3.0 Unported.

.gitignore

Tres formas de ignorar ficheros (por orden de prioridad)

.git/info/exclude -> sólo este repositorio

.gitignore -> todos los que clonan el repositorio

.gitignore_local -> todos mis repositorios locales

git config --get core.excludesfile

Se aplica el último patrón que se lee

jueves, 4 de abril de 13

Page 13: Diapositivas curso entendiendo_git

cursodegit.com aprendegit.comDiapositivas del curso "Entendiendo git" porcursodegit.com se encuentra bajo una Licencia Creative Commons Atribución-NoComercial-CompartirIgual 3.0 Unported.

.gitignore: Patrones

Líneas en blanco: se ignoran

# Comentarios

! negación

Patrones terminados en / se interpretan como carpetas

Si el patrón empieza por /, se interpreta como ruta relativa

El resto de patrones se interpretan como Shell globs

jueves, 4 de abril de 13

Page 14: Diapositivas curso entendiendo_git

cursodegit.com aprendegit.comDiapositivas del curso "Entendiendo git" porcursodegit.com se encuentra bajo una Licencia Creative Commons Atribución-NoComercial-CompartirIgual 3.0 Unported.

.gitignore: Patrones

* -> Comodín (no incluye el separador de directorios)

el patrón web/*.html ignora el fichero web/index.html pero no ignora web/blog/index.html

[ ] -> Selección.

? -> cualquier caracter (sólo uno)

jueves, 4 de abril de 13

Page 21: Diapositivas curso entendiendo_git

cursodegit.com aprendegit.comDiapositivas del curso "Entendiendo git" porcursodegit.com se encuentra bajo una Licencia Creative Commons Atribución-NoComercial-CompartirIgual 3.0 Unported.

Estado del repositorio$ git status# On branch lugares# Changes not staged for commit:# (use "git add <file>..." to update what will be committed)# (use "git checkout -- <file>..." to discard changes in working directory)##! modified: app/controllers/backend/application_controller.rb#! modified: config/routes.rb## Untracked files:# (use "git add <file>..." to include in what will be committed)##! app/assets/javascripts/backend/cities.js.coffee#! app/assets/javascripts/backend/resource.js.coffee#! app/assets/stylesheets/backend/cities.css.scss#! app/assets/stylesheets/backend/resource.css.scss#! app/controllers/backend/cities_controller.rb#! app/controllers/backend/resource_controller.rb#! app/helpers/backend/cities_helper.rb#! app/helpers/backend/resource_helper.rb#! app/views/backend/#! app/views/layouts/backend.html.erb#! test/controllers/backend/cities_controller_test.rb#! test/controllers/backend/resource_controller_test.rb#! test/helpers/backend/cities_helper_test.rb#! test/helpers/backend/resource_helper_test.rbno changes added to commit (use "git add" and/or "git commit -a")

jueves, 4 de abril de 13

Page 24: Diapositivas curso entendiendo_git

cursodegit.com aprendegit.comDiapositivas del curso "Entendiendo git" porcursodegit.com se encuentra bajo una Licencia Creative Commons Atribución-NoComercial-CompartirIgual 3.0 Unported.

Añadiendo ficherosSe puede iniciar un proceso interactivo para

seleccionar qué partes de un fichero queremos subir al staging area. Ejecutamos

git add -i

$ git add -i staged unstaged path 1: unchanged +2/-2 index.html

*** Commands *** 1: [s]tatus! 2: [u]pdate! 3: [r]evert! 4: [a]dd untracked 5: [p]atch! 6: [d]iff! 7: [q]uit! 8: [h]elpWhat now>

jueves, 4 de abril de 13

Page 25: Diapositivas curso entendiendo_git

cursodegit.com aprendegit.comDiapositivas del curso "Entendiendo git" porcursodegit.com se encuentra bajo una Licencia Creative Commons Atribución-NoComercial-CompartirIgual 3.0 Unported.

Añadiendo ficherosSeleccionar la opción “p” y posteriormente el fichero seleccionando el número que nos muestra la interfaz

$ git add -i staged unstaged path 1: unchanged +6/-2 index.html

*** Commands *** 1: [s]tatus! 2: [u]pdate! 3: [r]evert! 4: [a]dd untracked 5: [p]atch! 6: [d]iff! 7: [q]uit! 8: [h]elpWhat now> p staged unstaged path 1: unchanged +6/-2 [i]ndex.htmlPatch update>> 1 staged unstaged path* 1: unchanged +6/-2 [i]ndex.htmlPatch update>>

jueves, 4 de abril de 13

Page 27: Diapositivas curso entendiendo_git

cursodegit.com aprendegit.comDiapositivas del curso "Entendiendo git" porcursodegit.com se encuentra bajo una Licencia Creative Commons Atribución-NoComercial-CompartirIgual 3.0 Unported.

$ git add -i staged unstaged path 1: unchanged +6/-2 index.html

*** Commands *** 1: [s]tatus! 2: [u]pdate! 3: [r]evert! 4: [a]dd untracked 5: [p]atch! 6: [d]iff! 7: [q]uit! 8: [h]elpWhat now> p staged unstaged path 1: unchanged +6/-2 [i]ndex.htmlPatch update>> 1 staged unstaged path* 1: unchanged +6/-2 [i]ndex.htmlPatch update>> diff --git a/index.html b/index.htmlindex b08ce9a..3c50d0c 100644--- a/index.html+++ b/index.html@@ -21,8 +21,8 @@ <li><a href="#">Github</a></li> <li><a href="#">XCode</a></li> <li><a href="#">¿Quiénes somos?</a></li>- <li><a href="#">Cursos</a></li>- <li><a href="#">Contacto</a></li>+ <li><a href="#">Cursos de git</a></li>+ <li><a href="#">Contacta con nosotros</a></li> </ul> </div> </div>Stage this hunk [y,n,q,a,d,/,j,J,g,e,?]?

jueves, 4 de abril de 13

Page 28: Diapositivas curso entendiendo_git

cursodegit.com aprendegit.comDiapositivas del curso "Entendiendo git" porcursodegit.com se encuentra bajo una Licencia Creative Commons Atribución-NoComercial-CompartirIgual 3.0 Unported.

Añadiendo ficherosPuedes seleccionar qué hacer con los pedazos

(hunks) de código que has modificado en el fichero$ git add -i...Patch update>> diff --git a/index.html b/index.htmlindex b08ce9a..3c50d0c 100644--- a/index.html+++ b/index.html@@ -21,8 +21,8 @@ <li><a href="#">Github</a></li> <li><a href="#">XCode</a></li> <li><a href="#">¿Quiénes somos?</a></li>- <li><a href="#">Cursos</a></li>- <li><a href="#">Contacto</a></li>+ <li><a href="#">Cursos de git</a></li>+ <li><a href="#">Contacta con nosotros</a></li> </ul> </div> </div>Stage this hunk [y,n,q,a,d,/,j,J,g,e,?]?

jueves, 4 de abril de 13

Page 29: Diapositivas curso entendiendo_git

cursodegit.com aprendegit.comDiapositivas del curso "Entendiendo git" porcursodegit.com se encuentra bajo una Licencia Creative Commons Atribución-NoComercial-CompartirIgual 3.0 Unported.

Añadiendo ficherosPara saber qué es cada una de las opciones, pulsa ?

y luego “Intro”$ git add -i...Patch update>> diff --git a/index.html b/index.htmlindex b08ce9a..3c50d0c 100644--- a/index.html+++ b/index.html@@ -21,8 +21,8 @@ <li><a href="#">Github</a></li> <li><a href="#">XCode</a></li> <li><a href="#">¿Quiénes somos?</a></li>- <li><a href="#">Cursos</a></li>- <li><a href="#">Contacto</a></li>+ <li><a href="#">Cursos de git</a></li>+ <li><a href="#">Contacta con nosotros</a></li> </ul> </div> </div>Stage this hunk [y,n,q,a,d,/,j,J,g,e,?]? ?

jueves, 4 de abril de 13

Page 30: Diapositivas curso entendiendo_git

cursodegit.com aprendegit.comDiapositivas del curso "Entendiendo git" porcursodegit.com se encuentra bajo una Licencia Creative Commons Atribución-NoComercial-CompartirIgual 3.0 Unported.

Stage this hunk [y,n,q,a,d,/,j,J,g,e,?]? ?y - stage this hunkn - do not stage this hunkq - quit; do not stage this hunk nor any of the remaining onesa - stage this hunk and all later hunks in the filed - do not stage this hunk nor any of the later hunks in the fileg - select a hunk to go to/ - search for a hunk matching the given regexj - leave this hunk undecided, see next undecided hunkJ - leave this hunk undecided, see next hunkk - leave this hunk undecided, see previous undecided hunkK - leave this hunk undecided, see previous hunks - split the current hunk into smaller hunkse - manually edit the current hunk? - print help

Añadiendo ficheros

jueves, 4 de abril de 13

Page 31: Diapositivas curso entendiendo_git

cursodegit.com aprendegit.comDiapositivas del curso "Entendiendo git" porcursodegit.com se encuentra bajo una Licencia Creative Commons Atribución-NoComercial-CompartirIgual 3.0 Unported.

Stage this hunk [y,n,q,a,d,/,j,J,g,e,?]? ?y - Pasar este trozo al área de ensayon - No pasar este trozoq - terminar. No pasa este trozo ni ninguno de los que quedan al staging areaa - Pasa este pedazo y todos los que quedan al staging aread - No pases este trozo ni ninguno de los que quedan en el fichero al staging areag - Selecciona un trozo para situarnos en el/ - Busca un trozo que encaje con una expresión regularj - Mantener este trozo como “indeciso” y ve al siguiente hunk marcado como “indeciso”J - Mantener este trozo como “indeciso” y ve al siguientek - Mantener este trozo como “indeciso” y ve al siguiente hunk marcado como “indeciso”K - siguiente hunk marcado como “indeciso” y ve al anteriors - rompe este trozo en trozos más pequeñose - editar este trozo manualmente? - ayuda

Añadiendo ficheros

jueves, 4 de abril de 13

Page 32: Diapositivas curso entendiendo_git

cursodegit.com aprendegit.comDiapositivas del curso "Entendiendo git" porcursodegit.com se encuentra bajo una Licencia Creative Commons Atribución-NoComercial-CompartirIgual 3.0 Unported.

Añadiendo ficherosAl terminar, podemos usar la opción “s” para ver el

estado y posteriormente “q” para terminar

What now> s staged unstaged path 1: +2/-2 +4/-0 index.html

*** Commands *** 1: [s]tatus! 2: [u]pdate! 3: [r]evert! 4: [a]dd untracked 5: [p]atch! 6: [d]iff! 7: [q]uit! 8: [h]elpWhat now> q

Cambios subidos al staging area

Cambios fuera del staging area ¡no estarán en el siguiente commit!

jueves, 4 de abril de 13

Page 34: Diapositivas curso entendiendo_git

cursodegit.com aprendegit.comDiapositivas del curso "Entendiendo git" porcursodegit.com se encuentra bajo una Licencia Creative Commons Atribución-NoComercial-CompartirIgual 3.0 Unported.

Añadiendo ficherosPasamos los ficheros al repositorio

git commit -m’Mensaje del commit’

Workingdirectory Staging Area Working

directory

Utilizad siempre un mensaje corto y descriptivoEvitad mensajes como “trabajando” “...” que no

aportan nada al que lo lee

jueves, 4 de abril de 13

Page 35: Diapositivas curso entendiendo_git

cursodegit.com aprendegit.comDiapositivas del curso "Entendiendo git" porcursodegit.com se encuentra bajo una Licencia Creative Commons Atribución-NoComercial-CompartirIgual 3.0 Unported.

Añadiendo ficherosSi nos hemos olvidado algún fichero al hacer el último commit,

podemos añadirlo al staging area con

git add <fichero>

y modificar el commit ejecutando

git commit --amend

La opción --amend también permite modificar el comentario del commit

jueves, 4 de abril de 13

Page 37: Diapositivas curso entendiendo_git

cursodegit.com aprendegit.comDiapositivas del curso "Entendiendo git" porcursodegit.com se encuentra bajo una Licencia Creative Commons Atribución-NoComercial-CompartirIgual 3.0 Unported.

Borrando y moviendo ficheros

Borrar un fichero del índice

git rm <fichero>

Mover un fichero

git mv <ruta actual> <ruta nueva>

jueves, 4 de abril de 13

Page 61: Diapositivas curso entendiendo_git

cursodegit.com aprendegit.comDiapositivas del curso "Entendiendo git" porcursodegit.com se encuentra bajo una Licencia Creative Commons Atribución-NoComercial-CompartirIgual 3.0 Unported.

Repositorios remotos

Para subir nuestro repositorio a un repositorio remoto necesitamos conocer la URL del repositorio

jueves, 4 de abril de 13

Page 65: Diapositivas curso entendiendo_git

cursodegit.com aprendegit.comDiapositivas del curso "Entendiendo git" porcursodegit.com se encuentra bajo una Licencia Creative Commons Atribución-NoComercial-CompartirIgual 3.0 Unported.

Tracking branchesUna “Tracking branch” es una rama local que está

relacionada con una remota.

Si estás en una rama local que es “tracking branch” de una rama remota y ejecutas el comando

git push

git automáticamente lo convierte en

git push <tracking branch> <origin/rama remota>

jueves, 4 de abril de 13

Page 72: Diapositivas curso entendiendo_git

cursodegit.com aprendegit.comDiapositivas del curso "Entendiendo git" porcursodegit.com se encuentra bajo una Licencia Creative Commons Atribución-NoComercial-CompartirIgual 3.0 Unported.

Buenas prácticasUsa ramas locales

No dejar los mensajes de los commits vacíos

Usar mensajes descriptivos que indiquen qué contiene el commit. ¿Qué quiere decir “trabajando”? ¿Y “...”?

Si utilizas un sistema de tareas o bug tracking que se enlaza con git (como Jira o redmine) enlaza tus commits con tus tickets, bugs o tareas

Haz commits pequeños. Haz commit a menudo.

Usa ramas locales

Atomiza los commits todo lo que puedas. Intenta no mezclar en un mismo commit código de cosas que no tengan nada que ver entre sí.

Por ejemplo: si has hecho tres vistas (tabla de registros, detalle de registro y formulario de alta de registro) haz tres commits, no hagas sólo uno.

El flujo TDD es escribir test - rojo - escribir código - verde - commit.

Si luego te quedan muchos commits, siempre puedes hacer squashing.

Usa ramas locales y utiliza rebase para incorporar los cambios de las otras ramas.

Haz squashing de tus commits para eliminar aquellos que sean irrelevantes para el resto del equipo

Evita sobreescribir la historia del repositorio (a no ser que sepas lo que estás haciendo)

Por cierto, usa ramas locales

jueves, 4 de abril de 13