SlideShare une entreprise Scribd logo
1  sur  84
Télécharger pour lire hors ligne
Mejorando en Git
@SergiGP
Software Craftsmanship BCN
@SergiGP
Developer en Akamon
PHP & Javascript & …
aprendiz
sergigp.com
Personalización
$ vim ~/.gitconfig
$ git st
$ git ci -m ‘refactor’
$ git co master
*~
.DS_Store
.idea
Personalización
$ git ls
documentación ejemplos avanzados
Cherry Pick
$ git co feature-0002
$ git cherry-pick 0bb6886
$ git log --oneline
Mover cambios entre branches
Cherry Pick
$ git co feature-0002
$ git cherry-pick 0bb6886
$ git log --oneline
Mover cambios entre branches
Se puede hacer cherry pick de rango de commits (1.7.2+)
$ git cherry-pick 0bb6886^..ab768ba
Si 0bb6886 no es anterior a ab768ba git falla silenciosamente
Tagging
Marcar commits como importantes.
$ git tag -a v1.4 -m 'my version 1.4’ 9fceb02
$ git push origin v1.4
$ git push origin --tags
Los tags se pushean explicitamente
Pushear todos los tags
$ git tag Listar todos los tags
Merge vs Rebase
Workflow con feature branches.
¿Como reintegramos las features
e n m a s t e r c u a n d o e s t á n
terminadas?
Merge vs Rebase
$ git co master
$ git merge feature-0001
$ git log --oneline
Merge vs Rebase
$ git co feature-0001
$ git rebase master
$ git co master
$ git rebase feature-0001
$ git log --oneline
Merge vs Rebase
$ git co HEAD~2 (nos vamos dos commits atrás)
rebasemerge
Merge vs Rebase
Merge Rebase
Historial confuso Historial más limpio
Funcionalidad
en un solo commit *
Funcionalidad
en varios commits
Resolver mismos
conflictos varias veces ( git rerere)
A veces requiere force push
Submodules
• Repositorios dentro de repositorios
• Librerías externas en nuestro proyecto que
queremos mantener actualizadas
• Mantener en repos para diferentes partes del
proyecto
Submodules
• Repositorios dentro de repositorios
• Librerías externas en nuestro proyecto que
queremos mantener actualizadas
• Mantener en repos para diferentes partes del
proyecto
COMPLEJIDAD ACCIDENTAL
Submodules
$ git submodule add https://github.com/angular/angular.js.git js/angular
$ git clone https://github.com/myrepo
$ git submodule init
$ git submodule update
Otro miembro del equipo:
(o pull…)
Hooks
• Realizar algunas acciones cuando pasa “algo” en
nuestro repositorio
• Eventos:
• applypatch-msg
• pre-applypatch
• post-applypath
• pre-commit
• prepare-commit-msg
• post-commit
• pre-rebase
• post-checkout
• post-merge
• pre-recieve
• update
• post-recieve
• post-update
• pre-auto-gc
• post-rewrite
Hooks (II)
Existen plantillas con ejemplos en todos los repositorios en .git/
hooks.
$ cd .git/hooks && cp pre-commit.sample pre-commit
!
$ vim pre-commit
howto y más detalle
Bisect
Manager
Developer
Bisect
- ¡Está petando producción!
Manager
Developer
Bisect
- ¡Está petando producción!
Manager
Developer
Bisect (II)
Bisect (II)
$ git bisect start
$ git bisect bad
Bisect (II)
$ git bisect start
$ git bisect bad
$ git co HEAD~8
Bisect (II)
$ git bisect start
$ git bisect bad
$ git co HEAD~8
Bisect (II)
$ git bisect start
$ git bisect bad
$ git bisect good
$ git co HEAD~8
Bisect (III)
Bisect (III)
$ git bisect bad
Bisect (III)
$ git bisect bad
Bisect (III)
$ git bisect bad
$ git bisect good
Bisect (IV)
Bisect (IV)
$ git show C4
$ git blame ficherosospechoso
Bisect (IV)
$ git show C4
$ git blame ficherosospechoso
Bisect (IV)
$ git show C4
$ git blame ficherosospechoso
$ git bisect reset
Bisect (V)
Step 1
Step 2
Step 3
Step 4
Bisect (VI)
$ git bisect [comando]
• visualize
• log [ > nombrefichero ]
• replay nombrefichero
• skip
Bisect
$ git bisect run [ script / tests / compilar… ]
$ git bisect run phpunit --exclude-group=functional
$ git bisect run make
howto y ejemplos
Gestionando remotos
pablo sergi jordi jesús eloi
A long time ago in a galaxy far, far away ….
Gestionando remotos
pablo sergi jordi jesús eloi
origin
Gestionando remotos
pablo sergi jordi jesús eloi
git push origin
feature-001
origin
Gestionando remotos
pablo sergi jordi jesús eloi
git push origin
feature-001
git pull origin
feature-001
origin
Gestionando remotos
pablo sergi jordi jesús eloi
git push origin
feature-001
git pull origin
feature-001
git ci -m
‘mejoras
rabbitmq’
origin
Gestionando remotos
pablo sergi jordi jesús eloi
git push origin
feature-001
git pull origin
feature-001
git ci -m
‘mejoras
rabbitmq’
Eloi sube tus
cambios plis
origin
Gestionando remotos
pablo sergi jordi jesús eloi
git push origin
feature-001
git pull origin
feature-001
git ci -m
‘mejoras
rabbitmq’
Eloi sube tus
cambios plis
NO! espera!
que pusheo yo
antes
origin
Gestionando remotos
pablo sergi jordi jesús eloi
git push origin
feature-001
git pull origin
feature-001
git ci -m
‘mejoras
rabbitmq’
Eloi sube tus
cambios plis
NO! espera!
que pusheo yo
antes
…
origin
Gestionando remotos
pablo
sergi
jordi
jesús
eloi
akamon
Gestionando remotos
pablo
sergi
jordi
jesús
eloi
akamon
git push origin
feature-001
Gestionando remotos
pablo
sergi
jordi
jesús
eloi
akamon
git push origin
feature-001
Gestionando remotos
pablo
sergi
jordi
jesús
eloi
akamon
git push origin
feature-001
git pull pablo
feature-001
Gestionando remotos
pablo
sergi
jordi
jesús
eloi
akamon
git push origin
feature-001
git pull pablo
feature-001
Gestionando remotos
pablo
sergi
jordi
jesús
eloi
akamon
git push origin
feature-001
git pull pablo
feature-001
git ci -m
‘mejoras
rabbitmq’
Gestionando remotos
pablo
sergi
jordi
jesús
eloi
akamon
git push origin
feature-001
git pull pablo
feature-001
git ci -m
‘mejoras
rabbitmq’
git push pablo
feature-001
Gestionando remotos
pablo
sergi
jordi
jesús
eloi
akamon
git push origin
feature-001
git pull pablo
feature-001
git ci -m
‘mejoras
rabbitmq’
git push pablo
feature-001
Gestionando remotos
pablo
sergi
jordi
jesús
eloi
akamon
git push origin
feature-001
git pull pablo
feature-001
git ci -m
‘mejoras
rabbitmq’
git push pablo
feature-001
git pull pablo
feature-001
Gestionando remotos
pablo
sergi
jordi
jesús
eloi
akamon
git push origin
feature-001
git pull pablo
feature-001
git ci -m
‘mejoras
rabbitmq’
git push pablo
feature-001
git pull pablo
feature-001
Gestionando remotos
pablo
sergi
jordi
jesús
eloi
akamon
git push origin
feature-001
git pull pablo
feature-001
git ci -m
‘mejoras
rabbitmq’
git push pablo
feature-001
git pull pablo
feature-001
git push origin
feature-001
Gestionando remotos
pablo
sergi
jordi
jesús
eloi
akamon
git push origin
feature-001
git pull pablo
feature-001
git ci -m
‘mejoras
rabbitmq’
git push pablo
feature-001
git pull pablo
feature-001
git push origin
feature-001
Gestionando remotos
pablo
sergi
jordi
jesús
eloi
akamon
git push origin
feature-001
git pull pablo
feature-001
git ci -m
‘mejoras
rabbitmq’
git push pablo
feature-001
git pull pablo
feature-001
git push origin
feature-001
git co
integration
Gestionando remotos
pablo
sergi
jordi
jesús
eloi
akamon
git push origin
feature-001
git pull pablo
feature-001
git ci -m
‘mejoras
rabbitmq’
git push pablo
feature-001
git pull pablo
feature-001
git push origin
feature-001
git co
integration
git pull jesus/
feature-001
Gestionando remotos
pablo
sergi
jordi
jesús
eloi
akamon
git push origin
feature-001
git pull pablo
feature-001
git ci -m
‘mejoras
rabbitmq’
git push pablo
feature-001
git pull pablo
feature-001
git push origin
feature-001
git co
integration
git pull jesus/
feature-001
Gestionando remotos
pablo
sergi
jordi
jesús
eloi
akamon
git push origin
feature-001
git pull pablo
feature-001
git ci -m
‘mejoras
rabbitmq’
git push pablo
feature-001
git pull pablo
feature-001
git push origin
feature-001
git co
integration
git pull jesus/
feature-001
git push
akamon
integration
Gestionando remotos
pablo
sergi
jordi
jesús
eloi
akamon
git push origin
feature-001
git pull pablo
feature-001
git ci -m
‘mejoras
rabbitmq’
git push pablo
feature-001
git pull pablo
feature-001
git push origin
feature-001
git co
integration
git pull jesus/
feature-001
git push
akamon
integration
Gestionando remotos
pablo
sergi
jordi
jesús
eloi
akamon
git push origin
feature-001
git pull pablo
feature-001
git ci -m
‘mejoras
rabbitmq’
git push pablo
feature-001
git pull pablo
feature-001
git push origin
feature-001
git co
integration
git pull jesus/
feature-001
git push
akamon
integration
git pull
akamon
integration
Gestionando remotos
pablo
sergi
jordi
jesús
eloi
akamon
git push origin
feature-001
git pull pablo
feature-001
git ci -m
‘mejoras
rabbitmq’
git push pablo
feature-001
git pull pablo
feature-001
git push origin
feature-001
git co
integration
git pull jesus/
feature-001
git push
akamon
integration
git pull
akamon
integration
Pull Requests
En un repositorio que no es tuyo (ni tienes permisos):
• Necesitas una funcionalidad que no existe
• Encuentras un bug…
• Ves una posible mejora …
• Si el repo es tuyo (o tienes permisos) para generar
debate
Pull Request == Propongo
incluir algo en un repo
Pull Requests
• Haces un fork (copia) de un repositorio
• Modificas tu copia y propones tus cambios
• El propietario los acepta o no …
dhh/rails sergigp/rails
Pull Requests
• Haces un fork (copia) de un repositorio
• Modificas tu copia y propones tus cambios
• El propietario los acepta o no …
dhh/rails sergigp/rails
Hi, I’m DHH
and TDD is
DEAD
Pull Requests
• Haces un fork (copia) de un repositorio
• Modificas tu copia y propones tus cambios
• El propietario los acepta o no …
dhh/rails sergigp/rails
fork dhh/rails
Hi, I’m DHH
and TDD is
DEAD
Pull Requests
• Haces un fork (copia) de un repositorio
• Modificas tu copia y propones tus cambios
• El propietario los acepta o no …
dhh/rails sergigp/rails
fork dhh/rails
Hi, I’m DHH
and TDD is
DEAD
git ci -m ‘remove
active record’
Pull Requests
• Haces un fork (copia) de un repositorio
• Modificas tu copia y propones tus cambios
• El propietario los acepta o no …
dhh/rails sergigp/rails
fork dhh/rails
Hi, I’m DHH
and TDD is
DEAD
git ci -m ‘remove
active record’
Pull Request!
Pull Requests
• Haces un fork (copia) de un repositorio
• Modificas tu copia y propones tus cambios
• El propietario los acepta o no …
dhh/rails sergigp/rails
fork dhh/rails
Hi, I’m DHH
and TDD is
DEAD
git ci -m ‘remove
active record’
Pull Request!
Pull Request
Pull Requests
• Haces un fork (copia) de un repositorio
• Modificas tu copia y propones tus cambios
• El propietario los acepta o no …
dhh/rails sergigp/rails
fork dhh/rails
Hi, I’m DHH
and TDD is
DEAD
git ci -m ‘remove
active record’
Pull Request!
Pull Request
Pull Requests
• Haces un fork (copia) de un repositorio
• Modificas tu copia y propones tus cambios
• El propietario los acepta o no …
dhh/rails sergigp/rails
fork dhh/rails
Hi, I’m DHH
and TDD is
DEAD
git ci -m ‘remove
active record’
Pull Request!
Pull Request
F*CK YOU
Pull Requests
Pull Requests
Epic PRs
Reflog
Con log, checkout, branch y reset podemos “volver”
a cualquier commit.
Con reflog, checkout, branch y reset podemos
“volver” a cualquier estado.
log es un listado de commits!
!
reflog es un listado de HEADs referencias
Reflog
$ git reflog
Que son referencias en git?
HEADs, stash, tags, bisect …
$ ls -l .git/refs
$ git reflog show feature-0002
Fsck
• Si reflog no funciona… que no cunda el panico
• fsck comprueba la integridad de la BD de git.
Luego podemos recuperar objetos y referencias
perdidas con alguna copia de seguridad
• Flags --full y --unreachable
Filter branch
Git está diseñado para no perder nunca cambios
realizados… ¿Pero que pasa si queremos perderlos?
!
Filter branch
Git está diseñado para no perder nunca cambios
realizados… ¿Pero que pasa si queremos perderlos?
!
eliminar passwords de producción commiteados y
pusheados
$ git filter-branch —tree-filter “sed ’s/mipassword//g’ >
parameters.temp; mv parameters.temp parameters.yml”
Otros usos
• Documentación: Markdown + Github = WIN
• Blogging: Github Pages
• Git con imagenes: Github images diffing
Otros usos
• Documentación: Markdown + Github = WIN
• Blogging: Github Pages
• Git con imagenes: Github images diffing
Herramientas
• Hub: Wrapper de git para mejorar integración con Github
• Clientes:
• Tower
• SourceTree
• Github client
• gitk
• GitX
• IntelliJ (PHPStorm, PyCharm…)
¿Preguntas?
Moltes gràcies :)

Contenu connexe

Similaire à Mejorando en Git

Scott Chacon - Cuento de tres árboles
Scott Chacon - Cuento de tres árbolesScott Chacon - Cuento de tres árboles
Scott Chacon - Cuento de tres árboles
StarTech Conference
 
05 intro-git-github-heroku-v4
05 intro-git-github-heroku-v405 intro-git-github-heroku-v4
05 intro-git-github-heroku-v4
fyomaira
 

Similaire à Mejorando en Git (20)

Scott Chacon - Cuento de tres árboles
Scott Chacon - Cuento de tres árbolesScott Chacon - Cuento de tres árboles
Scott Chacon - Cuento de tres árboles
 
Git + Github - Betabeers Córdoba XII
Git + Github - Betabeers Córdoba XIIGit + Github - Betabeers Córdoba XII
Git + Github - Betabeers Córdoba XII
 
Git + Github - Sysmana 2014
Git + Github - Sysmana 2014Git + Github - Sysmana 2014
Git + Github - Sysmana 2014
 
Flujos de trabajo y mejores prácticas en git
Flujos de trabajo y mejores prácticas en gitFlujos de trabajo y mejores prácticas en git
Flujos de trabajo y mejores prácticas en git
 
Git
GitGit
Git
 
Repositorio concesionariocochesfloresgomezrobertocarlos
Repositorio concesionariocochesfloresgomezrobertocarlosRepositorio concesionariocochesfloresgomezrobertocarlos
Repositorio concesionariocochesfloresgomezrobertocarlos
 
Git 101+
Git 101+Git 101+
Git 101+
 
Uso de git para el mantenimiento de parches locales o públicos
Uso de git para el mantenimiento  de parches locales o públicosUso de git para el mantenimiento  de parches locales o públicos
Uso de git para el mantenimiento de parches locales o públicos
 
05 intro-git-github-heroku-v4
05 intro-git-github-heroku-v405 intro-git-github-heroku-v4
05 intro-git-github-heroku-v4
 
Más allá de Git add/commit/push
Más allá de Git add/commit/pushMás allá de Git add/commit/push
Más allá de Git add/commit/push
 
Mercurial
MercurialMercurial
Mercurial
 
Git: un enfoque práctico
Git: un enfoque prácticoGit: un enfoque práctico
Git: un enfoque práctico
 
Git - Gitlab
Git - GitlabGit - Gitlab
Git - Gitlab
 
WorkShop: Introducción a GIT
WorkShop: Introducción a GITWorkShop: Introducción a GIT
WorkShop: Introducción a GIT
 
Git y github básico
Git y github básicoGit y github básico
Git y github básico
 
Curso: Publicando mi proyecto web en Github
Curso: Publicando mi proyecto web en GithubCurso: Publicando mi proyecto web en Github
Curso: Publicando mi proyecto web en Github
 
Introducción a git
Introducción a gitIntroducción a git
Introducción a git
 
Mejora tu productividad con git
Mejora tu productividad con gitMejora tu productividad con git
Mejora tu productividad con git
 
Git para-principiantes
Git para-principiantesGit para-principiantes
Git para-principiantes
 
Subir versiones a repositorio GitHub
Subir versiones a repositorio GitHubSubir versiones a repositorio GitHub
Subir versiones a repositorio GitHub
 

Dernier

Tipos de suelo y su clasificación y ejemplos
Tipos de suelo y su clasificación y ejemplosTipos de suelo y su clasificación y ejemplos
Tipos de suelo y su clasificación y ejemplos
andersonsubero28
 

Dernier (20)

Arquitecto cambio de uso de suelo Limache
Arquitecto cambio de uso de suelo LimacheArquitecto cambio de uso de suelo Limache
Arquitecto cambio de uso de suelo Limache
 
3er Informe Laboratorio Quimica General (2) (1).pdf
3er Informe Laboratorio Quimica General  (2) (1).pdf3er Informe Laboratorio Quimica General  (2) (1).pdf
3er Informe Laboratorio Quimica General (2) (1).pdf
 
Determinación de espacios en la instalación
Determinación de espacios en la instalaciónDeterminación de espacios en la instalación
Determinación de espacios en la instalación
 
docsity-manzaneo-y-lotizacion para habilitacopm urbana
docsity-manzaneo-y-lotizacion para habilitacopm urbanadocsity-manzaneo-y-lotizacion para habilitacopm urbana
docsity-manzaneo-y-lotizacion para habilitacopm urbana
 
NTC 3883 análisis sensorial. metodología. prueba duo-trio.pdf
NTC 3883 análisis sensorial. metodología. prueba duo-trio.pdfNTC 3883 análisis sensorial. metodología. prueba duo-trio.pdf
NTC 3883 análisis sensorial. metodología. prueba duo-trio.pdf
 
Balance materia y energia procesos de Secado
Balance materia y energia procesos de SecadoBalance materia y energia procesos de Secado
Balance materia y energia procesos de Secado
 
Análisis de Costos y Presupuestos CAPECO
Análisis de Costos y Presupuestos CAPECOAnálisis de Costos y Presupuestos CAPECO
Análisis de Costos y Presupuestos CAPECO
 
TECNOLOGIA DE CONCRETO 2024 estudiante.pdf
TECNOLOGIA DE CONCRETO 2024 estudiante.pdfTECNOLOGIA DE CONCRETO 2024 estudiante.pdf
TECNOLOGIA DE CONCRETO 2024 estudiante.pdf
 
CAPACITACIÓN EN AGUA Y SANEAMIENTO EN ZONAS RURALES
CAPACITACIÓN EN AGUA Y SANEAMIENTO EN ZONAS RURALESCAPACITACIÓN EN AGUA Y SANEAMIENTO EN ZONAS RURALES
CAPACITACIÓN EN AGUA Y SANEAMIENTO EN ZONAS RURALES
 
G4 - CASO DE ESTUDIO - VOLUMEN DE UN RESERVORIO (1).pptx
G4 - CASO DE ESTUDIO - VOLUMEN DE UN RESERVORIO (1).pptxG4 - CASO DE ESTUDIO - VOLUMEN DE UN RESERVORIO (1).pptx
G4 - CASO DE ESTUDIO - VOLUMEN DE UN RESERVORIO (1).pptx
 
ingenieria grafica para la carrera de ingeniera .pptx
ingenieria grafica para la carrera de ingeniera .pptxingenieria grafica para la carrera de ingeniera .pptx
ingenieria grafica para la carrera de ingeniera .pptx
 
Tipos de suelo y su clasificación y ejemplos
Tipos de suelo y su clasificación y ejemplosTipos de suelo y su clasificación y ejemplos
Tipos de suelo y su clasificación y ejemplos
 
Mantenimiento-de-Transformadores-Monofasicos[1].pptx
Mantenimiento-de-Transformadores-Monofasicos[1].pptxMantenimiento-de-Transformadores-Monofasicos[1].pptx
Mantenimiento-de-Transformadores-Monofasicos[1].pptx
 
INTEGRATED PROJECT DELIVERY.pdf (ENTREGA INTEGRADA DE PROYECTOS)
INTEGRATED PROJECT DELIVERY.pdf (ENTREGA INTEGRADA DE PROYECTOS)INTEGRATED PROJECT DELIVERY.pdf (ENTREGA INTEGRADA DE PROYECTOS)
INTEGRATED PROJECT DELIVERY.pdf (ENTREGA INTEGRADA DE PROYECTOS)
 
Mecatronica Automotriz .pdf
Mecatronica Automotriz              .pdfMecatronica Automotriz              .pdf
Mecatronica Automotriz .pdf
 
Auditoría de Sistemas de Gestión
Auditoría    de   Sistemas     de GestiónAuditoría    de   Sistemas     de Gestión
Auditoría de Sistemas de Gestión
 
27311861-Cuencas-sedimentarias-en-Colombia.ppt
27311861-Cuencas-sedimentarias-en-Colombia.ppt27311861-Cuencas-sedimentarias-en-Colombia.ppt
27311861-Cuencas-sedimentarias-en-Colombia.ppt
 
Trabajos Preliminares en Obras de Construcción..pdf
Trabajos Preliminares en Obras de Construcción..pdfTrabajos Preliminares en Obras de Construcción..pdf
Trabajos Preliminares en Obras de Construcción..pdf
 
Trabajo practico N°14 - Despacho Economico de Cargas - Campus 2022.pdf
Trabajo practico N°14 - Despacho Economico de Cargas - Campus 2022.pdfTrabajo practico N°14 - Despacho Economico de Cargas - Campus 2022.pdf
Trabajo practico N°14 - Despacho Economico de Cargas - Campus 2022.pdf
 
ARMADURAS METODO NODOS.pptx......................
ARMADURAS METODO NODOS.pptx......................ARMADURAS METODO NODOS.pptx......................
ARMADURAS METODO NODOS.pptx......................
 

Mejorando en Git