SlideShare una empresa de Scribd logo
1 de 67
Descargar para leer sin conexión
Control de versiones
 con Git y GitHub
            Raúl Murciano
      Desarrollador Web Freelance

      II Jornadas Conocimiento Libre
 Universidad Europea de Madrid - GLUEM
Índice

•Control de versiones
• Git
• GitHub
Copyleft Vicente J. Ruiz Jurado
Creative Commons, atribución, comparte por igual.
CONOCIMIENTO LIBRE


  SOFTWARE LIBRE


HERRAMIENTAS LIBRES
EQUIPO
SOLO
Ventajas del Control de Versiones:
   Almacenamiento y Backup
Ventajas del Control de Versiones:
Control de Acceso mediante permisos
Ventajas del Control
   de Versiones:
  Deshacer
 ILIMITADO
Ventajas del Control
   de Versiones:
  Deshacer
 ILIMITADO
Ventajas del Control de Versiones:
      Mezclar aportaciones
   de distintos colaboradores
Ventajas del Control de Versiones:
Todos se mantienen sincronizados fácilmente
Ventajas del Control de Versiones:
       Histórico de Cambios


• Quién
• Qué
• Cuándo
• Para Qué
Ventajas del Control de Versiones:
      Versiones en paralelo
Copiar y Pegar archivos
 Practica1

 Practica1_enero_14_fulano
 Practica1_enero_14_final

 Practica1_enero_14_final_de_verdad




        NO
es Control de Versiones
Batallita
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
Ejemplo: lista de la compra
            versión 0


             (vacía)




(vacía)                  (vacía)
Ejemplo: lista de la compra
              versión 0


               (vacía)




hamburguesa                (vacía)
Ejemplo: lista de la compra
               versión 0


              hamburguesa

     commit



hamburguesa                 (vacía)
Ejemplo: lista de la compra
               versión 1


              hamburguesa




hamburguesa                 hamburguesa
Ejemplo: lista de la compra
               versión 1


              hamburguesa




                            hamburguesa
hamburguesa                   verdura
Ejemplo: lista de la compra
              versión 2


              verdura

                          commit

                          hamburguesa
hamburguesa                 verdura
Ejemplo: lista de la compra
              versión 2


              verdura




hamburguesa                verdura
  cerveza
Ejemplo: lista de la compra
                     versión 2

 intenta enviar un
commit pero no lo    verdura
   consigue: hay
     conflictos


 hamburguesa                     verdura
   cerveza
Ejemplo: lista de la compra
                       versión 2
tiene que actualizar
  su versión local,
    resolver los       verdura
conflictos y volver a
  enviar un nuevo
      commit


  hamburguesa                      verdura
    cerveza
Ejemplo: lista de la compra
               versión 2


               verdura



hamburguesa
  verdura                   verdura
  cerveza
Ejemplo: lista de la compra
               versión 3

               verdura
     commit    cerveza



hamburguesa
  verdura                   verdura
  cerveza
Ejemplo: lista de la compra
El repositorio almacena todas las versiones y los cambios
                  (vacía)
 10:30                        “Para cenar, hamburguesas...”
              hamburguesa
                                 “¿Con esa panza? ¡Más
 10:35                          verdura y menos grasa!”
                 verdura
                              “Al menos que sea con
  10:40                           una cervecita...”
                 verdura
                 cerveza
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. ...
Otro ejemplo:
    editor de textos


1    2       3         4
Otro ejemplo:
           editor de textos


1             2           3            4


                      Tag v0.1

    Se pueden etiquetar versiones
    concretas, para localizarlas fácilmente
    en la historia del repositorio.
Otro ejemplo:
              editor de textos

      1             2             3             4


                              Tag v0.1

¿Qué ocurre si mientras estamos desarrollando la funcionalidad
      4 se descubre un bug en alguna de las anteriores?
Otro ejemplo:
                 editor de textos
                                                 rama
                                 4
                                               desarrollo

                                                  rama
1            2           3            3a
                                               producción

                      Tag v0.1    Tag v0.1.1
    Para evitar esto se suele trabajar en “ramas”
Otro ejemplo:
               editor de textos
                              4         5


1          2           3           3a        6


                   Tag v0.1    Tag v0.1.1 Tag v0.2

    Cuando la rama de desarrollo sea estable la
       fusionaremos con la de producción
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
Integration Manager


     blessed
    repository




                        developer        developer
integration manager
                         private          private




      Scott Chacon, Scotland on Rails Mar’09
Integration Manager


     blessed
    repository          developer        developer
                          public           public




                        developer        developer
integration manager
                         private          private




      Scott Chacon, Scotland on Rails Mar’09
Dictador/Tenientes

 dictator                                       blessed repository




                 lieutenant

lieutenant




developer             developer     developer                developer



             Scott Chacon, Scotland on Rails Mar’09
Dictador/Tenientes

 dictator                                        blessed repository




                 lieutenant

lieutenant




developer             developer      developer                developer



             Scott Chacon, Scotland on Rails Mar’09
Tipos de Sistemas de
   Control de Versiones

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


• Centralizados vs Distribuidos
(&         ()          (*         (+   (,



            !"#$%       !&                     !)
 !"#$%
&$'(%)"
            !"#$'                              !&   !)



            !"#$(       !&          !)              !*




             (&         ()          (*         (+   (,




&*%+&,'$     %          %&          %&         %)   %)

 &$'(%)"
             '           '          '          '&   ')



             (          (&          ()         ()   (*



           Scott Chacon, Scotland on Rails Mar’09
(&         ()          (*         (+   (,



            !"#$%       !&                     !)
 !"#$%
&$'(%)"
            !"#$'                              !&   !)



            !"#$(       !&          !)              !*




             (&         ()          (*         (+   (,




&*%+&,'$     %          %&          %&         %)   %)

 &$'(%)"
             '           '          '          '&   ')



             (          (&          ()         ()   (*



           Scott Chacon, Scotland on Rails Mar’09
Git es distribuido
      • Aunque se trabaje con un repositorio
          remoto, siempre se tiene uno en local

                                                       repositorio
directorio local   área de cambios     repositorio
                                                         remoto
   de trabajo         (“staging”)    local (privado)
                                                        (público)
Git es distribuido
                                                         repositorio
  directorio local   área de cambios     repositorio
                                                           remoto
     de trabajo         (“staging”)    local (privado)
                                                          (público)


  En el dir. local se
 programan nuevas
 funcionalidades, se
corrigen errores, etc
Git es distribuido
                                                          repositorio
   directorio local   área de cambios     repositorio
                                                            remoto
      de trabajo         (“staging”)    local (privado)
                                                           (público)

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

           git status
             git add
              git rm
Git es distribuido
                                                       repositorio
directorio local   área de cambios     repositorio
                                                         remoto
   de trabajo         (“staging”)    local (privado)
                                                        (público)

                             Para aplicar los
                         cambios se envían al
                           repositorio local.
                         (Si hay conflictos Git
                         nos echa una mano)
                             git commit
Git es distribuido
                                                         repositorio
directorio local   área de cambios   repositorio local
                                                           remoto
   de trabajo         (“staging”)       (privado)
                                                          (público)

                         En este punto Git es
                            especialmente
                           potente: permite
                         reorganizar commits,
                             agruparlos, ...
Git es distribuido
                                                          repositorio
directorio local    área de cambios   repositorio local
                                                            remoto
   de trabajo          (“staging”)       (privado)
                                                           (público)




                                        Se pueden enviar cambios al
                   git pull           repositorio público y mantener
                   git push                 el local actualizado.
Git es distribuido
                                                          repositorio
 directorio local   área de cambios   repositorio local
                                                            remoto
    de trabajo         (“staging”)       (privado)
                                                           (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
Git es distribuido
                                                         repositorio
directorio local   área de cambios   repositorio local
                                                           remoto
   de trabajo         (“staging”)       (privado)
                                                          (público)


                                         ramas            ramas
                                        locales          remotas
    Se pueden llevar ramas para el desarrollo en
       local, otras en remoto para manejar las
  versiones del programa, sincronizarlas entre sí....
Git es distribuido

repositorio local
   (privado)




  repositorio
    remoto
   (público)
Git-svn
                                                          repositorio
directorio local   área de cambios   repositorio local
                                                            remoto
   de trabajo         (“staging”)       (privado)
                                                           (público)




                       Git                               subversion
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
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
GitHub
GitHub
GitHub
GitHub
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...)
GitHub
Datos 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...
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
¿Preguntas?
Imágenes
[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)

Más contenido relacionado

La actualidad más candente

A Git Workflow Model or Branching Strategy
A Git Workflow Model or Branching StrategyA Git Workflow Model or Branching Strategy
A Git Workflow Model or Branching StrategyVivek Parihar
 
Git Tutorial For Beginners | What is Git and GitHub? | DevOps Tools | DevOps ...
Git Tutorial For Beginners | What is Git and GitHub? | DevOps Tools | DevOps ...Git Tutorial For Beginners | What is Git and GitHub? | DevOps Tools | DevOps ...
Git Tutorial For Beginners | What is Git and GitHub? | DevOps Tools | DevOps ...Simplilearn
 
Change Data Streaming Patterns For Microservices With Debezium (Gunnar Morlin...
Change Data Streaming Patterns For Microservices With Debezium (Gunnar Morlin...Change Data Streaming Patterns For Microservices With Debezium (Gunnar Morlin...
Change Data Streaming Patterns For Microservices With Debezium (Gunnar Morlin...confluent
 
Continuous Integration With Jenkins
Continuous Integration With JenkinsContinuous Integration With Jenkins
Continuous Integration With JenkinsEdureka!
 
Incrementally streaming rdbms data to your data lake automagically
Incrementally streaming rdbms data to your data lake automagicallyIncrementally streaming rdbms data to your data lake automagically
Incrementally streaming rdbms data to your data lake automagicallyTimothy Spann
 
Git Branching – the battle of the ages
Git Branching – the battle of the agesGit Branching – the battle of the ages
Git Branching – the battle of the agesJasmin Fluri
 
Introducing GitLab (September 2018)
Introducing GitLab (September 2018)Introducing GitLab (September 2018)
Introducing GitLab (September 2018)Noa Harel
 
Come Fly With Me: Database Migration Patterns with Flyway
Come Fly With Me: Database Migration Patterns with FlywayCome Fly With Me: Database Migration Patterns with Flyway
Come Fly With Me: Database Migration Patterns with FlywayJoris Kuipers
 
PostgreSQL and Benchmarks
PostgreSQL and BenchmarksPostgreSQL and Benchmarks
PostgreSQL and BenchmarksJignesh Shah
 
2009 1 - sistemas operacionais - aula 4 - threads e comunicacao entre processos
2009 1 - sistemas operacionais - aula 4 - threads e comunicacao entre processos2009 1 - sistemas operacionais - aula 4 - threads e comunicacao entre processos
2009 1 - sistemas operacionais - aula 4 - threads e comunicacao entre processosComputação Depressão
 
Become Jythonic in FDMEE (KSCOPE15)
Become Jythonic in FDMEE (KSCOPE15)Become Jythonic in FDMEE (KSCOPE15)
Become Jythonic in FDMEE (KSCOPE15)Francisco Amores
 

La actualidad más candente (20)

A Git Workflow Model or Branching Strategy
A Git Workflow Model or Branching StrategyA Git Workflow Model or Branching Strategy
A Git Workflow Model or Branching Strategy
 
Git flow
Git flowGit flow
Git flow
 
Git Branching Model
Git Branching ModelGit Branching Model
Git Branching Model
 
Git Tutorial For Beginners | What is Git and GitHub? | DevOps Tools | DevOps ...
Git Tutorial For Beginners | What is Git and GitHub? | DevOps Tools | DevOps ...Git Tutorial For Beginners | What is Git and GitHub? | DevOps Tools | DevOps ...
Git Tutorial For Beginners | What is Git and GitHub? | DevOps Tools | DevOps ...
 
MENÚ MASTER WINGS LEÓN
MENÚ MASTER WINGS LEÓNMENÚ MASTER WINGS LEÓN
MENÚ MASTER WINGS LEÓN
 
Change Data Streaming Patterns For Microservices With Debezium (Gunnar Morlin...
Change Data Streaming Patterns For Microservices With Debezium (Gunnar Morlin...Change Data Streaming Patterns For Microservices With Debezium (Gunnar Morlin...
Change Data Streaming Patterns For Microservices With Debezium (Gunnar Morlin...
 
Continuous Integration With Jenkins
Continuous Integration With JenkinsContinuous Integration With Jenkins
Continuous Integration With Jenkins
 
Incrementally streaming rdbms data to your data lake automagically
Incrementally streaming rdbms data to your data lake automagicallyIncrementally streaming rdbms data to your data lake automagically
Incrementally streaming rdbms data to your data lake automagically
 
Git Branching – the battle of the ages
Git Branching – the battle of the agesGit Branching – the battle of the ages
Git Branching – the battle of the ages
 
Introducing GitLab (September 2018)
Introducing GitLab (September 2018)Introducing GitLab (September 2018)
Introducing GitLab (September 2018)
 
Come Fly With Me: Database Migration Patterns with Flyway
Come Fly With Me: Database Migration Patterns with FlywayCome Fly With Me: Database Migration Patterns with Flyway
Come Fly With Me: Database Migration Patterns with Flyway
 
Git l'essentiel
Git l'essentielGit l'essentiel
Git l'essentiel
 
Git and github 101
Git and github 101Git and github 101
Git and github 101
 
PostgreSQL and Benchmarks
PostgreSQL and BenchmarksPostgreSQL and Benchmarks
PostgreSQL and Benchmarks
 
Bitbucket
BitbucketBitbucket
Bitbucket
 
2009 1 - sistemas operacionais - aula 4 - threads e comunicacao entre processos
2009 1 - sistemas operacionais - aula 4 - threads e comunicacao entre processos2009 1 - sistemas operacionais - aula 4 - threads e comunicacao entre processos
2009 1 - sistemas operacionais - aula 4 - threads e comunicacao entre processos
 
GIT INTRODUCTION
GIT INTRODUCTIONGIT INTRODUCTION
GIT INTRODUCTION
 
Become Jythonic in FDMEE (KSCOPE15)
Become Jythonic in FDMEE (KSCOPE15)Become Jythonic in FDMEE (KSCOPE15)
Become Jythonic in FDMEE (KSCOPE15)
 
BitBucket presentation
BitBucket presentationBitBucket presentation
BitBucket presentation
 
Introducción a git y git hub
Introducción a git y git hubIntroducción a git y git hub
Introducción a git y git hub
 

Destacado

Introducción al uso Git y GitHub para trabajo colaborativo
Introducción al uso Git y GitHub para trabajo colaborativoIntroducción al uso Git y GitHub para trabajo colaborativo
Introducción al uso Git y GitHub para trabajo colaborativoJuan J. Merelo
 
Git and GitHub
Git and GitHubGit and GitHub
Git and GitHubJames Gray
 
Git 101: Git and GitHub for Beginners
Git 101: Git and GitHub for Beginners Git 101: Git and GitHub for Beginners
Git 101: Git and GitHub for Beginners HubSpot
 
Introducción a git
Introducción a gitIntroducción a git
Introducción a gitKeopx
 
GitHub para el resto de nosotros
GitHub para el resto de nosotrosGitHub para el resto de nosotros
GitHub para el resto de nosotrosnoticiascac
 
Git: un enfoque práctico
Git: un enfoque prácticoGit: un enfoque práctico
Git: un enfoque prácticoPatxi Gortázar
 
Google apps
Google appsGoogle apps
Google appsKapu94r
 
El git nuestro de cada dia
El git nuestro de cada diaEl git nuestro de cada dia
El git nuestro de cada diaAlan Descoins
 
Integración contínua con Jenkins
Integración contínua con JenkinsIntegración contínua con Jenkins
Integración contínua con JenkinsCésar Hernández
 
Ic maven jenkins_sonar
Ic maven jenkins_sonarIc maven jenkins_sonar
Ic maven jenkins_sonarRocío Muñoz
 
Using Docker for Testing
Using Docker for TestingUsing Docker for Testing
Using Docker for TestingCarlos Sanchez
 
Git 101 - Crash Course in Version Control using Git
Git 101 - Crash Course in Version Control using GitGit 101 - Crash Course in Version Control using Git
Git 101 - Crash Course in Version Control using GitGeoff Hoffman
 

Destacado (20)

Introducción al uso Git y GitHub para trabajo colaborativo
Introducción al uso Git y GitHub para trabajo colaborativoIntroducción al uso Git y GitHub para trabajo colaborativo
Introducción al uso Git y GitHub para trabajo colaborativo
 
Git and Github
Git and GithubGit and Github
Git and Github
 
Git and GitHub
Git and GitHubGit and GitHub
Git and GitHub
 
Git 101: Git and GitHub for Beginners
Git 101: Git and GitHub for Beginners Git 101: Git and GitHub for Beginners
Git 101: Git and GitHub for Beginners
 
Git, GitHub y Markdown
Git, GitHub y MarkdownGit, GitHub y Markdown
Git, GitHub y Markdown
 
Introducción a git
Introducción a gitIntroducción a git
Introducción a git
 
GitHub para el resto de nosotros
GitHub para el resto de nosotrosGitHub para el resto de nosotros
GitHub para el resto de nosotros
 
Minicurso Git
Minicurso GitMinicurso Git
Minicurso Git
 
Git / Guía Básica
Git / Guía BásicaGit / Guía Básica
Git / Guía Básica
 
git and github
git and githubgit and github
git and github
 
Jenkins, no me rompas los builds!
Jenkins, no me rompas los builds!Jenkins, no me rompas los builds!
Jenkins, no me rompas los builds!
 
Git: un enfoque práctico
Git: un enfoque prácticoGit: un enfoque práctico
Git: un enfoque práctico
 
Google apps
Google appsGoogle apps
Google apps
 
El git nuestro de cada dia
El git nuestro de cada diaEl git nuestro de cada dia
El git nuestro de cada dia
 
Inside GitHub with Chris Wanstrath
Inside GitHub with Chris WanstrathInside GitHub with Chris Wanstrath
Inside GitHub with Chris Wanstrath
 
Integración contínua con Jenkins
Integración contínua con JenkinsIntegración contínua con Jenkins
Integración contínua con Jenkins
 
Introduction to Git and GitHub
Introduction to Git and GitHubIntroduction to Git and GitHub
Introduction to Git and GitHub
 
Ic maven jenkins_sonar
Ic maven jenkins_sonarIc maven jenkins_sonar
Ic maven jenkins_sonar
 
Using Docker for Testing
Using Docker for TestingUsing Docker for Testing
Using Docker for Testing
 
Git 101 - Crash Course in Version Control using Git
Git 101 - Crash Course in Version Control using GitGit 101 - Crash Course in Version Control using Git
Git 101 - Crash Course in Version Control using Git
 

Similar a Control de versiones con Git y Github

U1 Control de versiones.pdf
U1 Control de versiones.pdfU1 Control de versiones.pdf
U1 Control de versiones.pdfEric Quiñones
 
Administra tu código con Git y Github
Administra tu código con Git y GithubAdministra tu código con Git y Github
Administra tu código con Git y GithubJavier Novoa Cataño
 
05 intro-git-github-heroku-v4
05 intro-git-github-heroku-v405 intro-git-github-heroku-v4
05 intro-git-github-heroku-v4fyomaira
 
Git with gifs
Git with gifsGit with gifs
Git with gifsbetabeers
 
Primeros pasos con git
Primeros pasos con gitPrimeros pasos con git
Primeros pasos con gitJuan Vladimir
 
Repositorio concesionariocochesfloresgomezrobertocarlos
Repositorio concesionariocochesfloresgomezrobertocarlosRepositorio concesionariocochesfloresgomezrobertocarlos
Repositorio concesionariocochesfloresgomezrobertocarlosRoberto Carlos Flores Gomez
 
Flujo de trabajo básico con git
Flujo de trabajo básico con gitFlujo de trabajo básico con git
Flujo de trabajo básico con gitJan Sanchez
 
Control de versiones utilizando Git
Control de versiones utilizando GitControl de versiones utilizando Git
Control de versiones utilizando GitHugo Gilmar Erazo
 
La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR
La Caja de Herramientas del Desarrollador Moderno PHPConferenceARLa Caja de Herramientas del Desarrollador Moderno PHPConferenceAR
La Caja de Herramientas del Desarrollador Moderno PHPConferenceARPablo Godel
 
Introducción a GIT
Introducción a GITIntroducción a GIT
Introducción a GITmaxfontana90
 
Manual para usuarios de Git @patxiredes.pdf
Manual para usuarios de Git @patxiredes.pdfManual para usuarios de Git @patxiredes.pdf
Manual para usuarios de Git @patxiredes.pdfCarlosJurado61
 
Control de versiones con git
Control de versiones con gitControl de versiones con git
Control de versiones con gitEudris Cabrera
 

Similar a Control de versiones con Git y Github (20)

U1 Control de versiones.pdf
U1 Control de versiones.pdfU1 Control de versiones.pdf
U1 Control de versiones.pdf
 
Un modelo exitoso para git
Un modelo exitoso para gitUn modelo exitoso para git
Un modelo exitoso para git
 
JRuby al Rescate de J2EE
JRuby al Rescate de J2EEJRuby al Rescate de J2EE
JRuby al Rescate de J2EE
 
Administra tu código con Git y Github
Administra tu código con Git y GithubAdministra tu código con Git y Github
Administra tu código con Git y Github
 
05 intro-git-github-heroku-v4
05 intro-git-github-heroku-v405 intro-git-github-heroku-v4
05 intro-git-github-heroku-v4
 
Control de versiones y Subversion
Control de versiones y SubversionControl de versiones y Subversion
Control de versiones y Subversion
 
Git with gifs
Git with gifsGit with gifs
Git with gifs
 
Primeros pasos con git
Primeros pasos con gitPrimeros pasos con git
Primeros pasos con git
 
Repositorio concesionariocochesfloresgomezrobertocarlos
Repositorio concesionariocochesfloresgomezrobertocarlosRepositorio concesionariocochesfloresgomezrobertocarlos
Repositorio concesionariocochesfloresgomezrobertocarlos
 
Subir versiones a repositorio GitHub
Subir versiones a repositorio GitHubSubir versiones a repositorio GitHub
Subir versiones a repositorio GitHub
 
Flujo de trabajo básico con git
Flujo de trabajo básico con gitFlujo de trabajo básico con git
Flujo de trabajo básico con git
 
Control de versiones utilizando Git
Control de versiones utilizando GitControl de versiones utilizando Git
Control de versiones utilizando Git
 
La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR
La Caja de Herramientas del Desarrollador Moderno PHPConferenceARLa Caja de Herramientas del Desarrollador Moderno PHPConferenceAR
La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR
 
Control de versiones con Git
Control de versiones con GitControl de versiones con Git
Control de versiones con Git
 
Introducción a GIT
Introducción a GITIntroducción a GIT
Introducción a GIT
 
JRuby Al Rescate J2EE
JRuby Al Rescate J2EEJRuby Al Rescate J2EE
JRuby Al Rescate J2EE
 
Git res baz ec - final
Git   res baz ec - finalGit   res baz ec - final
Git res baz ec - final
 
Manual para usuarios de Git @patxiredes.pdf
Manual para usuarios de Git @patxiredes.pdfManual para usuarios de Git @patxiredes.pdf
Manual para usuarios de Git @patxiredes.pdf
 
Introduccion a python 3
Introduccion a python 3Introduccion a python 3
Introduccion a python 3
 
Control de versiones con git
Control de versiones con gitControl de versiones con git
Control de versiones con git
 

Control de versiones con Git y Github

  • 1. Control de versiones con Git y GitHub Raúl Murciano Desarrollador Web Freelance II Jornadas Conocimiento Libre Universidad Europea de Madrid - GLUEM
  • 3. Copyleft Vicente J. Ruiz Jurado Creative Commons, atribución, comparte por igual.
  • 4. CONOCIMIENTO LIBRE SOFTWARE LIBRE HERRAMIENTAS LIBRES
  • 7. Ventajas del Control de Versiones: Almacenamiento y Backup
  • 8. Ventajas del Control de Versiones: Control de Acceso mediante permisos
  • 9. Ventajas del Control de Versiones: Deshacer ILIMITADO
  • 10. Ventajas del Control de Versiones: Deshacer ILIMITADO
  • 11.
  • 12. Ventajas del Control de Versiones: Mezclar aportaciones de distintos colaboradores
  • 13. Ventajas del Control de Versiones: Todos se mantienen sincronizados fácilmente
  • 14. Ventajas del Control de Versiones: Histórico de Cambios • Quién • Qué • Cuándo • Para Qué
  • 15. Ventajas del Control de Versiones: Versiones en paralelo
  • 16. Copiar y Pegar archivos Practica1 Practica1_enero_14_fulano Practica1_enero_14_final Practica1_enero_14_final_de_verdad NO es Control de Versiones
  • 18.
  • 19. 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
  • 20. Ejemplo: lista de la compra versión 0 (vacía) (vacía) (vacía)
  • 21. Ejemplo: lista de la compra versión 0 (vacía) hamburguesa (vacía)
  • 22. Ejemplo: lista de la compra versión 0 hamburguesa commit hamburguesa (vacía)
  • 23. Ejemplo: lista de la compra versión 1 hamburguesa hamburguesa hamburguesa
  • 24. Ejemplo: lista de la compra versión 1 hamburguesa hamburguesa hamburguesa verdura
  • 25. Ejemplo: lista de la compra versión 2 verdura commit hamburguesa hamburguesa verdura
  • 26. Ejemplo: lista de la compra versión 2 verdura hamburguesa verdura cerveza
  • 27. Ejemplo: lista de la compra versión 2 intenta enviar un commit pero no lo verdura consigue: hay conflictos hamburguesa verdura cerveza
  • 28. Ejemplo: lista de la compra versión 2 tiene que actualizar su versión local, resolver los verdura conflictos y volver a enviar un nuevo commit hamburguesa verdura cerveza
  • 29. Ejemplo: lista de la compra versión 2 verdura hamburguesa verdura verdura cerveza
  • 30. Ejemplo: lista de la compra versión 3 verdura commit cerveza hamburguesa verdura verdura cerveza
  • 31. Ejemplo: lista de la compra El repositorio almacena todas las versiones y los cambios (vacía) 10:30 “Para cenar, hamburguesas...” hamburguesa “¿Con esa panza? ¡Más 10:35 verdura y menos grasa!” verdura “Al menos que sea con 10:40 una cervecita...” verdura cerveza
  • 32. 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. ...
  • 33. Otro ejemplo: editor de textos 1 2 3 4
  • 34. Otro ejemplo: editor de textos 1 2 3 4 Tag v0.1 Se pueden etiquetar versiones concretas, para localizarlas fácilmente en la historia del repositorio.
  • 35. Otro ejemplo: editor de textos 1 2 3 4 Tag v0.1 ¿Qué ocurre si mientras estamos desarrollando la funcionalidad 4 se descubre un bug en alguna de las anteriores?
  • 36. Otro ejemplo: editor de textos rama 4 desarrollo rama 1 2 3 3a producción Tag v0.1 Tag v0.1.1 Para evitar esto se suele trabajar en “ramas”
  • 37. Otro ejemplo: editor de textos 4 5 1 2 3 3a 6 Tag v0.1 Tag v0.1.1 Tag v0.2 Cuando la rama de desarrollo sea estable la fusionaremos con la de producción
  • 38. 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
  • 39. Integration Manager blessed repository developer developer integration manager private private Scott Chacon, Scotland on Rails Mar’09
  • 40. Integration Manager blessed repository developer developer public public developer developer integration manager private private Scott Chacon, Scotland on Rails Mar’09
  • 41. Dictador/Tenientes dictator blessed repository lieutenant lieutenant developer developer developer developer Scott Chacon, Scotland on Rails Mar’09
  • 42. Dictador/Tenientes dictator blessed repository lieutenant lieutenant developer developer developer developer Scott Chacon, Scotland on Rails Mar’09
  • 43. Tipos de Sistemas de Control de Versiones • Incrementales vs basados en snapshots (“instantáneas”) • Centralizados vs Distribuidos
  • 44. (& () (* (+ (, !"#$% !& !) !"#$% &$'(%)" !"#$' !& !) !"#$( !& !) !* (& () (* (+ (, &*%+&,'$ % %& %& %) %) &$'(%)" ' ' ' '& ') ( (& () () (* Scott Chacon, Scotland on Rails Mar’09
  • 45. (& () (* (+ (, !"#$% !& !) !"#$% &$'(%)" !"#$' !& !) !"#$( !& !) !* (& () (* (+ (, &*%+&,'$ % %& %& %) %) &$'(%)" ' ' ' '& ') ( (& () () (* Scott Chacon, Scotland on Rails Mar’09
  • 46. Git es distribuido • Aunque se trabaje con un repositorio remoto, siempre se tiene uno en local repositorio directorio local área de cambios repositorio remoto de trabajo (“staging”) local (privado) (público)
  • 47. Git es distribuido repositorio directorio local área de cambios repositorio remoto de trabajo (“staging”) local (privado) (público) En el dir. local se programan nuevas funcionalidades, se corrigen errores, etc
  • 48. Git es distribuido repositorio directorio local área de cambios repositorio remoto de trabajo (“staging”) local (privado) (público) Cuando se termina una funcionalidad se marcan los cambios que se quieren aplicar y quedan registrados en el área de cambios git status git add git rm
  • 49. Git es distribuido repositorio directorio local área de cambios repositorio remoto de trabajo (“staging”) local (privado) (público) Para aplicar los cambios se envían al repositorio local. (Si hay conflictos Git nos echa una mano) git commit
  • 50. Git es distribuido repositorio directorio local área de cambios repositorio local remoto de trabajo (“staging”) (privado) (público) En este punto Git es especialmente potente: permite reorganizar commits, agruparlos, ...
  • 51. Git es distribuido repositorio directorio local área de cambios repositorio local remoto de trabajo (“staging”) (privado) (público) Se pueden enviar cambios al git pull repositorio público y mantener git push el local actualizado.
  • 52. Git es distribuido repositorio directorio local área de cambios repositorio local remoto de trabajo (“staging”) (privado) (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
  • 53. Git es distribuido repositorio directorio local área de cambios repositorio local remoto de trabajo (“staging”) (privado) (público) ramas ramas locales remotas Se pueden llevar ramas para el desarrollo en local, otras en remoto para manejar las versiones del programa, sincronizarlas entre sí....
  • 54. Git es distribuido repositorio local (privado) repositorio remoto (público)
  • 55. Git-svn repositorio directorio local área de cambios repositorio local remoto de trabajo (“staging”) (privado) (público) Git subversion
  • 56. 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
  • 57. 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
  • 63. 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...)
  • 64. GitHub Datos 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...
  • 65. 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
  • 67. Imágenes [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)