Download - Control de versiones con Git y Github

Transcript
Page 1: Control de versiones con Git y Github

Control de versiones con Git y GitHub

Raúl MurcianoDesarrollador Web Freelance

II Jornadas Conocimiento Libre Universidad Europea de Madrid - GLUEM

Page 2: Control de versiones con Git y Github

Índice

•Control de versiones

•Git

•GitHub

Page 3: Control de versiones con Git y Github

Copyleft Vicente J. Ruiz JuradoCreative Commons, atribución, comparte por igual.

Page 4: Control de versiones con Git y Github

HERRAMIENTAS LIBRES

CONOCIMIENTO LIBRE

SOFTWARE LIBRE

Page 5: Control de versiones con Git y Github

EQUIPO

Page 6: Control de versiones con Git y Github

SOLO

Page 7: Control de versiones con Git y Github

Ventajas del Control de Versiones:Almacenamiento y Backup

Page 8: Control de versiones con Git y Github

Ventajas del Control de Versiones:Control de Acceso mediante permisos

Page 9: Control de versiones con Git y Github

Ventajas del Control de Versiones:

Deshacer ILIMITADO

Page 10: Control de versiones con Git y Github

Ventajas del Control de Versiones:

Deshacer ILIMITADO

Page 11: Control de versiones con Git y Github
Page 12: Control de versiones con Git y Github

Ventajas del Control de Versiones:Mezclar aportaciones

de distintos colaboradores

Page 13: Control de versiones con Git y Github

Ventajas del Control de Versiones:Todos se mantienen sincronizados fácilmente

Page 14: Control de versiones con Git y Github

Ventajas del Control de Versiones:Histórico de Cambios

• Quién

• Qué

• Cuándo

• Para Qué

Page 15: Control de versiones con Git y Github

Ventajas del Control de Versiones:Versiones en paralelo

Page 16: Control de versiones con Git y Github

Copiar y Pegar archivos

NOes Control de Versiones

Practica1

Practica1_enero_14_fulano

Practica1_enero_14_final

Practica1_enero_14_final_de_verdad

Page 17: Control de versiones con Git y Github

Batallita

Page 18: Control de versiones con Git y Github
Page 19: Control de versiones con Git y Github

Vocabulario Básico:

• “repositorio”: almacén de datos que guarda cada versión de nuestro proyecto, incluyendo los datos asociados a cada commit

• “commit”: cambio de una versión a otra

Page 20: Control de versiones con Git y Github

Ejemplo: lista de la compra

versión 0

(vacía)

(vacía) (vacía)

Page 21: Control de versiones con Git y Github

Ejemplo: lista de la compra

versión 0

(vacía)

hamburguesa (vacía)

Page 22: Control de versiones con Git y Github

Ejemplo: lista de la compra

versión 0

hamburguesa

hamburguesa (vacía)

commit

Page 23: Control de versiones con Git y Github

Ejemplo: lista de la compra

versión 1

hamburguesa

hamburguesa hamburguesa

Page 24: Control de versiones con Git y Github

Ejemplo: lista de la compra

versión 1

hamburguesa

hamburguesahamburguesa

verdura

Page 25: Control de versiones con Git y Github

Ejemplo: lista de la compra

versión 2

verdura

hamburguesahamburguesa

verdura

commit

Page 26: Control de versiones con Git y Github

Ejemplo: lista de la compra

versión 2

verdura

hamburguesacerveza

verdura

Page 27: Control de versiones con Git y Github

Ejemplo: lista de la compra

versión 2

verdura

hamburguesacerveza

verdura

intenta enviar un commit pero no lo

consigue: hay conflictos

Page 28: Control de versiones con Git y Github

Ejemplo: lista de la compra

versión 2

verdura

hamburguesacerveza

verdura

tiene que actualizar su versión local,

resolver los conflictos y volver a

enviar un nuevo commit

Page 29: Control de versiones con Git y Github

Ejemplo: lista de la compra

versión 2

verdura

hamburguesaverduracerveza

verdura

Page 30: Control de versiones con Git y Github

Ejemplo: lista de la compra

versión 3

verduracerveza

hamburguesaverduracerveza

verdura

commit

Page 31: Control de versiones con Git y Github

Ejemplo: lista de la compraEl repositorio almacena todas las versiones y los cambios

(vacía)

hamburguesa

verdura

verduracerveza

10:30

10:35

10:40

“Para cenar, hamburguesas...”

“¿Con esa panza? ¡Más verdura y menos grasa!”

“Al menos que sea con una cervecita...”

Page 32: Control de versiones con Git y Github

Otro ejemplo: editor de textos

Planificación del desarrollo: se especifican las primeras funcionalidades y se priorizan.

1. Abrir/Guardar archivo

2. Edición

3. Copiar/Pegar

4. Formato negrita/cursiva/subrayado

5. ...

Page 33: Control de versiones con Git y Github

Otro ejemplo: editor de textos

1 2 3 4

Page 34: Control de versiones con Git y Github

Otro ejemplo: editor de textos

1 2 3 4

Se pueden etiquetar versiones concretas, para localizarlas fácilmente en la historia del repositorio.

Tag v0.1

Page 35: Control de versiones con Git y Github

Otro ejemplo: editor de textos

1 2 3 4

¿Qué ocurre si mientras estamos desarrollando la funcionalidad 4 se descubre un bug en alguna de las anteriores?

Tag v0.1

Page 36: Control de versiones con Git y Github

Otro ejemplo: editor de textos

1 2 3

4

Para evitar esto se suele trabajar en “ramas”

Tag v0.1

3a

Tag v0.1.1

rama producción

rama desarrollo

Page 37: Control de versiones con Git y Github

Otro ejemplo: editor de textos

1 2 3

Cuando la rama de desarrollo sea estable la fusionaremos con la de producción

Tag v0.1

3a

Tag v0.1.1

4 5

6

Tag v0.2

Page 38: Control de versiones con Git y Github

Toque final: permisos

• Normalmente los proyectos libres permiten que cualquiera pueda leer (descargar) el contenido del repositorio

• ...pero no escribir. Para contribuir hay que enviar parches que serán aplicados por el equipo de desarrollo oficial

• Si alguien aporta muchos parches se le termina dando permiso de escritura

Page 39: Control de versiones con Git y Github

Integration Manager

Scott Chacon, Scotland on Rails Mar’09

integration manager

blessedrepository

developerprivate

developerprivate

Scott Chacon, Scotland on Rails Mar’09

Page 40: Control de versiones con Git y Github

Integration Manager

developerpublic

developerpublic

integration manager

blessedrepository

developerprivate

developerprivate

Scott Chacon, Scotland on Rails Mar’09

Page 41: Control de versiones con Git y Github

Dictador/Tenientes

developerdeveloper

dictator

developer

lieutenant

blessed repository

developer

lieutenant

Scott Chacon, Scotland on Rails Mar’09

Page 42: Control de versiones con Git y Github

Dictador/Tenientes

developerdeveloper

dictator

developer

lieutenant

blessed repository

developer

lieutenant

Scott Chacon, Scotland on Rails Mar’09

Page 43: Control de versiones con Git y Github

Tipos de Sistemas de Control de Versiones

• Incrementales vs basados en snapshots (“instantáneas”)

• Centralizados vs Distribuidos

Page 44: Control de versiones con Git y Github

!"#$%

&$'(%)"

!"#$% !&

!"#$'

!"#$(

(& () (* (+ (,

!)

!& !)

!& !) !*

%

'

(

(& () (* (+ (,

%&

'

(&

%&

'

()

%)

'&

()

%)

')

(*

&*%+&,'$

&$'(%)"

Scott Chacon, Scotland on Rails Mar’09

Page 45: Control de versiones con Git y Github

!"#$%

&$'(%)"

!"#$% !&

!"#$'

!"#$(

(& () (* (+ (,

!)

!& !)

!& !) !*

%

'

(

(& () (* (+ (,

%&

'

(&

%&

'

()

%)

'&

()

%)

')

(*

&*%+&,'$

&$'(%)"

Scott Chacon, Scotland on Rails Mar’09

Page 46: Control de versiones con Git y Github

Git es distribuido

• Aunque se trabaje con un repositorio remoto, siempre se tiene uno en local

directorio local de trabajo

área de cambios (“staging”)

repositoriolocal (privado)

repositorioremoto(público)

Page 47: Control de versiones con Git y Github

Git es distribuido

directorio local de trabajo

área de cambios (“staging”)

repositoriolocal (privado)

repositorioremoto(público)

En el dir. local se programan nuevas funcionalidades, se

corrigen errores, etc

Page 48: Control de versiones con Git y Github

Git es distribuido

directorio local de trabajo

área de cambios (“staging”)

repositoriolocal (privado)

repositorioremoto(público)

Cuando se termina una funcionalidad se marcan los cambios que se quieren aplicar y quedan registrados en el área

de cambios

git statusgit addgit rm

Page 49: Control de versiones con Git y Github

Git es distribuido

directorio local de trabajo

área de cambios (“staging”)

repositoriolocal (privado)

repositorioremoto(público)

Para aplicar los cambios se envían al

repositorio local. (Si hay conflictos Git nos echa una mano)

git commit

Page 50: Control de versiones con Git y Github

Git es distribuido

directorio local de trabajo

área de cambios (“staging”)

repositorio local (privado)

repositorioremoto(público)

En este punto Git es especialmente

potente: permite reorganizar commits,

agruparlos, ...

Page 51: Control de versiones con Git y Github

Git es distribuido

directorio local de trabajo

área de cambios (“staging”)

repositorio local (privado)

repositorioremoto(público)

Se pueden enviar cambios al repositorio público y mantener

el local actualizado.git pullgit push

Page 52: Control de versiones con Git y Github

Git es distribuido

directorio local de trabajo

área de cambios (“staging”)

repositorio local (privado)

repositorioremoto(público)

Casi siempre se trabaja en local: • mucho más rápido, • se puede trabajar offline, • todo colaborador tiene una copia local que sirve de backup• se puede replicar el proyecto completo de manera trivial

Page 53: Control de versiones con Git y Github

Git es distribuido

directorio local de trabajo

área de cambios (“staging”)

repositorio local (privado)

repositorioremoto(público)

ramaslocales

ramasremotas

Se pueden llevar ramas para el desarrollo en local, otras en remoto para manejar las

versiones del programa, sincronizarlas entre sí....

Page 54: Control de versiones con Git y Github

Git es distribuido

repositorio local (privado)

repositorioremoto(público)

Page 55: Control de versiones con Git y Github

Git-svn

directorio local de trabajo

área de cambios (“staging”)

repositorio local (privado)

repositorioremoto(público)

Git subversion

Page 56: Control de versiones con Git y Github

Git

• Basado en instantáneas

• Muy cómodo para trabajar con ramas

• Distribuido

• Popular: Gnome, Perl, Linux, Ruby on Rails...

• Alternativas: subversion con git-svn, Mercurial

• Potente (más difícil de aprender que svn)

• Aún no hay un cliente gráfico para todo

Page 57: Control de versiones con Git y Github

GitHub

• Acceso web a repositorios Git

• Gratuito para proyectos libres

• Antepasados similares: sourceforge, savannah, gforge

• “Red social” para programadores, el código es la estrella

Page 58: Control de versiones con Git y Github

GitHub

Page 59: Control de versiones con Git y Github

GitHub

Page 60: Control de versiones con Git y Github

GitHub

Page 61: Control de versiones con Git y Github

GitHub

Page 62: Control de versiones con Git y Github

GitHub

Page 63: Control de versiones con Git y Github

GitHub

• mantenimiento cero: backups, disponibilidad (seguridad rep. privados)

• acceso visual a los proyectos y a los cambios

• interacción con desarrolladores (consultar su trabajo, qué proyectos siguen, mensajería...)

• interacción con proyectos (comentarios en los cambios, colaboración en los wikis, pull request...)

Page 64: Control de versiones con Git y Github

GitHubDatos Febrero 2009:

- 47.000 repositorios públicos, 17.000 (36%) creados el último mes

- 6.200 proyectos forkeados

- 4.600 recibieron contribuciones desde forks

- 18.000 proyectos con al menos un observador el 25% fue forkeado y recibió contribuciones

- no sólo de software vive el hacker: documentación, diseño, música...

Page 65: Control de versiones con Git y Github

Recursos

• git-scm.com

• gitready.com

• gitcasts.com

• book.git-scm.com

• “Pragmatic Version using Git” Ed. Pragmatic Programmers

• “Pro Git” Ed. APress

• github.com

Page 66: Control de versiones con Git y Github

¿Preguntas?

Page 67: Control de versiones con Git y Github

[3] http://homes.ourproject.org/~vjrj/blog/2006/04/12/software-libre-una-mudanza-necesaria/

[5] http://www.flickr.com/photos/wwworks/1384952210/

[6] http://www.flickr.com/photos/manel/303802658/

[7] http://www.flickr.com/photos/jm3/330155936/

[8] http://www.flickr.com/photos/jdelgama/3292355641/

[9] http://www.flickr.com/photos/patrigimeno/2061904821/

[11] http://apple.com

[12] http://www.flickr.com/photos/darthkao/2407993334/

[13] http://www.flickr.com/photos/xanboozled/1325199806

[14] http://www.flickr.com/photos/knoizki/3271782221/

[15] http://www.flickr.com/photos/guille/8066414/

[17] http://www.flickr.com/photos/manel/303802658/ (modificada)

Imágenes