Repositorios de control de versiones Distribuidos: Git

62
Repositorios de control de versiones distribuidos

description

Charla sobre DVCS. Mas concretamente explicaciones de las cualidades de Git.

Transcript of Repositorios de control de versiones Distribuidos: Git

Page 1: Repositorios de control de versiones Distribuidos: Git

Repositorios de control de versiones distribuidos

Page 2: Repositorios de control de versiones Distribuidos: Git

Sobre mi

@ialcazar

http://farmerdev.com

spainjs.org  

madridjs.org  

Freelance

Page 3: Repositorios de control de versiones Distribuidos: Git

UN POCO DE HISTORIA

Page 4: Repositorios de control de versiones Distribuidos: Git

Introducción a los VCS

1972: Source Code Control System (SCCS): Código cerrado, libre con Unix. 1982: Revision Control System (RCS) : Multiplataforma. Open Source. Mas funcionalidades y mas rápido. Solo podía trabajar con un fichero a la vez. 1986-1990: Concurrent Versions System (CVS): Trabajo de múltiples usuarios en el mismo fichero. Open Source.

Page 5: Repositorios de control de versiones Distribuidos: Git

Introducción a los VCS

2000: Apache Subversion. Snapshot de un directorio no solo de un fichero. Commits transaccionales. Más rápido. 2000: BitKeeper SCM. Código cerrado, propietario. Control de versiones distribuido. Versión para la comunidad era gratis. Utilizado por el proyecto del kernel de Linux en 2002-2005.

Abril 2005: Versión comunidad deja de ser libre.

Page 6: Repositorios de control de versiones Distribuidos: Git

Git Hits

§  Git nace en 2005

§  GitHub nace en 2008 como hosting de repositorios git.

§  2009: Github 50000 repos y 100000 usuarios.

§  2011: Github 2M repos y 1M usuarios

Page 7: Repositorios de control de versiones Distribuidos: Git

ARQUITECTURA

Page 8: Repositorios de control de versiones Distribuidos: Git

Mira la luz…

¡Hay qué desaprender!

Page 9: Repositorios de control de versiones Distribuidos: Git

Hay que tener en cuenta que…

§  Git trabaja en local (repositorio local)

§  Podemos “empujar” cambios a otros repositorios (repositorios remotos)

Page 10: Repositorios de control de versiones Distribuidos: Git

Hay que tener en cuenta que…

Trabajamos en local

Empujamos los cambios

Page 11: Repositorios de control de versiones Distribuidos: Git

Snapshots

Otros VCS

Almacena información como una lista de cambios (deltas)

Page 12: Repositorios de control de versiones Distribuidos: Git

Snapshots

Git: Conjunto de snapshots

Toma una foto del estado de cada fichero en cada momento y almacena una referencia a esa instantanea.

Page 13: Repositorios de control de versiones Distribuidos: Git

Snapshots

Git: Conjunto de snapshots

Si el fichero no tiene cambios Git no lo almacena otra vez.

Page 14: Repositorios de control de versiones Distribuidos: Git

Instalación

http://git-scm.com/downloads

Page 15: Repositorios de control de versiones Distribuidos: Git

PROBLEMÁTICA DEL DESARROLLO

Page 16: Repositorios de control de versiones Distribuidos: Git

Trabajo con ramas

Rama estable

Rama “en desarrollo” (trunk, master, default)

Tag  v.1.0  

Page 17: Repositorios de control de versiones Distribuidos: Git

Trabajo con ramas

Rama estable

Rama “en desarrollo” (trunk, master, default)

Tag  v.1.0  

Funcionalidades  

Resolución  Bugs  

Page 18: Repositorios de control de versiones Distribuidos: Git

SERVIDORES CENTRALIZADOS

Page 19: Repositorios de control de versiones Distribuidos: Git

h;p://subversion.apache.org/  

Page 20: Repositorios de control de versiones Distribuidos: Git

Subversion

Surge en el 2000 tratando de mejorar algunas deficiencias de CVS. Su modelo, diseño e interfaz son muy parecidas a CVS.

Page 21: Repositorios de control de versiones Distribuidos: Git

Subversion: Pros

§  Muchas de las características de CVS.

§  Versionado de directorios, no solo ficheros.

§  Copiado y borrado son operaciones de versionado.

§  Commit atómicos: “o todo o nada”

§  Creación de ramas y tags más rápidos que CVS

Page 22: Repositorios de control de versiones Distribuidos: Git

Subversion: Contras

§  Las ramas y etiquetas son copias físicas de los archivos.

§  No disponible sin conexión

§  Resolución de merge puede ser problemática à trabajo solo sobre el histórico de revisiones

Page 23: Repositorios de control de versiones Distribuidos: Git

Subversion: Contras

En conclusión, contosa la creación de ramas

y resolución de conflictos.

Page 24: Repositorios de control de versiones Distribuidos: Git

CARACTERÍSTICAS DE LOS REPOSITORIOS DISTRIBUIDOS:GIT

Page 25: Repositorios de control de versiones Distribuidos: Git

Características

Trabajo fácil con ramas locales. Velocidad de manejo de ramas

Page 26: Repositorios de control de versiones Distribuidos: Git

Características

Rapidez Cada operación se realiza en el repositorio local. No es necesario conexión con otro servidor. Trabajo offline sin problemas. Rápido

Page 27: Repositorios de control de versiones Distribuidos: Git

Características

Rapidez - Operaciones en local, velocidad constante

Git  

Page 28: Repositorios de control de versiones Distribuidos: Git

Características

Distribuido -  Clonación del repositorio completo

-  Múltiples backups

-  Diferentes flujos de trabajo.

Page 29: Repositorios de control de versiones Distribuidos: Git

Características

Integridad  de datos Cada elemento se idenficia por un código hash. Es imposible cambiar el contenido de un fichero o directorio sin que se entere Git. No podemos perder información o corromper el repo sin que se detecte.

Page 30: Repositorios de control de versiones Distribuidos: Git

Características

Integridad de datos -  Representación de los ficheros mediante código

SHA en función del contenido.

Checksum (sha1):

24b9da6552252987aa493b52f8696cd6d3b00373  

Page 31: Repositorios de control de versiones Distribuidos: Git

Zonas

Zona de staging (Índice) Zona intermedia donde los commits son preparados

antes de poder realizarlos.

Page 32: Repositorios de control de versiones Distribuidos: Git

Flujos de trabajo

Enfoque centralizado

Page 33: Repositorios de control de versiones Distribuidos: Git

Flujos de trabajo

Enfoque distribuido: Flujo manager

Page 34: Repositorios de control de versiones Distribuidos: Git

Flujos de trabajo

Enfoque distribuido: Flujo Dictador

Page 35: Repositorios de control de versiones Distribuidos: Git

Gestión de ramas

Master  

Feature  1  

Desarrollo  

Tag  0.1  

Producción  

1) Una rama por cada funcionalidad / tarea (local)

Aceptación?  

Feature  2  

Aceptación?  

Page 36: Repositorios de control de versiones Distribuidos: Git

Gestión de ramas

Master  

Feature  1  Feature  2  Desarrollo  

Fallo  

Aceptación  Ok  

Producción  

Aceptación  

2) Una rama por cada funcionalidad / tarea (local)

Permite entrega continua

Page 37: Repositorios de control de versiones Distribuidos: Git

Gestión de bugs

3) Cada bug se resuelve en una rama independiente

Master  HoRixes  Desarrollo  

Tag  0.2  

Incorporación  del  bug  en  Desarrollo  

Tag  0.1  

Producción  

Page 38: Repositorios de control de versiones Distribuidos: Git

Beneficios

Algunos de los beneficios que pueden obtener los equipos de desarrollo son:

§  Reducir el time to market. §  Releases más estables. §  Evitar la propagación de bugs. §  Mantener la línea principal de desarrollo

limpia. §  Aumenta la versatilidad en la forma de trabajar.

Page 39: Repositorios de control de versiones Distribuidos: Git

Un ejemplo

Page 40: Repositorios de control de versiones Distribuidos: Git

REESCRIBIENDO LA HISTORIA

Page 41: Repositorios de control de versiones Distribuidos: Git

Reescribiendo la historia

Pull con rebase Aplicar cambios por encima de otros. Para mantener coherente el repositorio.

Page 42: Repositorios de control de versiones Distribuidos: Git

Reescribiendo la historia

Pull con rebase (1)

Repositorio Original

Page 43: Repositorios de control de versiones Distribuidos: Git

Reescribiendo la historia

Pull con rebase (2)

Hacemos cambios en local

Page 44: Repositorios de control de versiones Distribuidos: Git

Reescribiendo la historia

Pull con rebase (3a)

Pull sin rebase

Page 45: Repositorios de control de versiones Distribuidos: Git

Reescribiendo la historia

Pull con rebase (3b)

Pull con rebase git pull --rebase <ALIAS-REPO> <BRANCH>

Page 46: Repositorios de control de versiones Distribuidos: Git

Merge con Fast Forward

Page 47: Repositorios de control de versiones Distribuidos: Git

Reescribiendo la historia

Squashing Permite reagrupar commits

Reagrupación  de  commits  

Page 48: Repositorios de control de versiones Distribuidos: Git

Reescribiendo la historia

Squashing Permite reagrupar commits $ git rebase –i <primer-commit> $ git rebase –i HEAD^4

Page 49: Repositorios de control de versiones Distribuidos: Git

PROPUESTA DE SOLUCIONES

Page 50: Repositorios de control de versiones Distribuidos: Git

h;p://github.com  

Repositorios en la nube

h;p://bitbucket.org  

Page 51: Repositorios de control de versiones Distribuidos: Git

Github.com

Plan   Precio     Nº  Repositorios  privados  

Large   $50  /month   50  

Medium   $22  /month   20  

Small   $12/month   10  

Micro   $7/month   5  

Free   $0/month   0  

Page 52: Repositorios de control de versiones Distribuidos: Git

Bitbucket.org

Usuarios   Precio    

5   GraXs  

10   $10/month  

25   $25/month  

50   $50/month  

100   $100/month  

Ilimitados   $200/month    

Todos  los  planes  incluyen:  -­‐ Repositorios  privados  ilimitados  -­‐ Revisión  de  código  -­‐ Integración  con  JIRA  -­‐ Soporte  -­‐ Personalización  de  dominios  -­‐   API  Rest  

Page 53: Repositorios de control de versiones Distribuidos: Git

h;p://sitaramc.github.com/gitolite/index.html  

Open Source

+  h;p://gitlabhq.com/  

Page 54: Repositorios de control de versiones Distribuidos: Git

Gitolite

§  Open Source

§  Capa de control de acceso sobre Git §  Permisos a repositorios §  Permisos a nivel de branch / tag / directorio / file

§  Administración a través de un repositorio Git

§  Necesita Git y Perl instalados

Page 55: Repositorios de control de versiones Distribuidos: Git

Gitlab

§  Open Source

§  Basado en Ruby on Rails y Gitolite

§  Manejo visual de permisos

§  Revisión de código

§  Merge Request

§  Integración con LDAP compleja

Page 56: Repositorios de control de versiones Distribuidos: Git

MIGRACIÓN DE SVN A GIT

Page 57: Repositorios de control de versiones Distribuidos: Git

svn2git

$ svn2git Migración de proyectos SVN a Git manteniendo trunk, branches y tags https://github.com/nirvdrum/svn2git  

Page 58: Repositorios de control de versiones Distribuidos: Git

git svn

$ git svn Comando que permite utilizar SVN como repositorio remoto de Git. Para transiciones largas de SVN a Git donde el repositorio SVN es necesario mantenerlo durante un tiempo http://schacon.github.com/git/git-svn.html  

Page 59: Repositorios de control de versiones Distribuidos: Git

Integración continua

Existe plugin para Jenkins: https://wiki.jenkins-ci.org/display/JENKINS/Git+Plugin    

Page 60: Repositorios de control de versiones Distribuidos: Git

Artículo interesante

Don´t use Git: http://svenpet.com/2013/02/21/dont-use-git/        

Page 61: Repositorios de control de versiones Distribuidos: Git

¿Preguntas?

Israel Alcázar Rodríguez [email protected] @ialcazar

Page 62: Repositorios de control de versiones Distribuidos: Git