SlideShare una empresa de Scribd logo
Iñaki Arenaza [email_address] @iarenaza (Creative Commons Attribution Non-commercial Share Alike 3.0 Spain License) Introducción al uso de
Sistemas de Control de Versiones Centralizados (CVCS) Ejemplos: CVS, Subversion, Perforce, SourceSafe, ... Fuente: http://progit.org/book/ch1-1.html (CC-BY-NC-SA 3.0)
Sistemas de Control de Versiones Distribuidos (DVCS) Ejemplos: git, Mercurial, Bazaar, BitKeeper,... Fuente: http://progit.org/book/ch1-1.html (CC-BY-NC-SA 3.0)
Diferencias versus instantáneas git, Mercurial* Bazaar, Mercurial* Fuente: http://progit.org/book/ch1-3.html (CC-BY-NC-SA 3.0) Fuente: http://progit.org/book/ch1-3.html (CC-BY-NC-SA 3.0)
(Algunas) características de git (Casi) todas las operaciones son locales
Git tiene integridad fuerte (sha1)
Git (generalmente) sólo añade datos
Los tres espacios y tres estados Fuente: http://progit.org/book/ch1-3.html (CC-BY-NC-SA 3.0) Modified* Staged Committed
Los tres espacios El directorio (repositorio) es donde git almacena los metadatos y la base de datos de objetos para tu proyecto.
El directorio de trabajo es una copia de trabajo de una versión del proyecto.
El área de preparación (staging area) es un archivo que almacena información sobre lo que irá en el próximo commit. Antes se le llamaba “el índice”.
Los tres estados Confirmado/no modificado (committed): los datos están almacenados de manera segura en el directorio.
Modificado (modified): se ha modificado el archivo pero todavía no se ha confirmado.
Preparado (staged): se ha marcado para confirmación un archivo modificado en su versión actual.
Los “tres + 1” estados Fuente: http://progit.org/book/ch2-2.html  (CC-BY-NC-SA 3.0) El estado 3+1
Terminología de git En los ejemplos siguientes $GIT_DIR contiene la ruta de un repositorio git dado
objeto: unidad de almacenamiento en git.  Se identifica de forma unívoca por el SHA1 de su contenido.
Por tanto, un objeto es inmutable.
Tipos de objetos de git blob: objeto sin tipo, para guardar  el contenido de un fichero. “Un fichero”.
tree: lista de nombres y permisos, junto con las referencias de objetos blob o tree asociados. “Un directorio”.
Tipos de objetos de git commit: información de una revisión dada. Incluye: los padres del objeto,
la persona que ha realizado el commit de la revisión,
el autor de la revisión,
la fecha de la misma,
un mensaje asociado,
el objeto tree que corresponde al directorio raíz de la revisión.
Tipos de objetos de git tag: identifica de forma simbólica a otros objetos y puede ser usado para firmar éstos. Contiene: el nombre y tipo de otro objeto,
un nombre simbólico (el de la propia tag)
puede contener un mensaje asociado.
opcionalmente puede incluir una firma (PGP). En este último caso se denomina un "objeto de etiqueta firmada".
Terminología de git (cont.) nombre de objeto o identificador de objeto: identificador único del objeto ( de 40 bytes con la representación hexadecimal del SHA1 de su contenido )
base de datos de objetos: almacena un conjunto de objetos ( habitualmente en $GIT_DIR/objects/ ).
ref o referencia: cadena de 40 bytes con la representación hexadecimal de un SHA1, o un nombre simbólico ( que se almacena en $GIT_DIR/refs/ ) que denota un objeto particular.
Terminología de git (cont.) revisión: estado concreto de una serie de ficheros y directorios que ha sido almacenado en la base de datos de objetos. Se hace referencia a él por medio de un objeto commit.
padre: un objeto commit contiene una lista (potencialmente vacía) de objetos commit que representan a sus predecesores lógicos en la línea de desarrollo, esto es, sus ancestros.
Tipos de objetos de git Fuente: http://progit.org/book/ch3-1.html  (CC-BY-NC-SA 3.0)
Tipos de objetos de git Fuente: http://progit.org/book/ch3-1.html  (CC-BY-NC-SA 3.0)
Terminología de git (cont.) repositorio: colección de referencias junto con una base de datos de objetos tiene todos los objetos que son alcanzables desde dichas referencias.: Puede contener además algunos meta datos adicionales usados por determinas órdenes de git.
Puede contenier una copia de trabajo de una revisión. repositorio desnudo (bare): repositorio que no tiene una copia de trabajo. Los de control de git que normalmente estarían presentes en el subdirectorio oculto .git están presentes en el propio directorio del repositorio.
Terminología de git (cont.) árbol de trabajo o copia de trabajo: Una revisión extraida del repositorio, para poder trabajar con ella.
índice: una colección de ficheros con información de stat(2), cuyos contenidos están almacenados como objetos. El índice es una versión almacenada del árbol de trabajo.
Terminología de git (cont.) rama: línea activa de desarrollo. El commit más reciente de una rama se denomina la punta de dicha rama. La punta de la rama se referencia por medio de una cabeza.
La copia de trabajo está siempre asociada a una rama (la rama "actual" o "checked out") y la cabeza especial “HEAD” apunta a esa rama. cabeza: una referencia con nombre, que apunta al objeto commit de la punta de una rama. Las cabezas se almacenan en $GIT_DIR/refs/heads/, (salvo que se usen referencias empaquetadas).
Terminología de git (cont.) checkout: acción de actualizar parte o todo el árbol de trabajo con un objeto árbol o blob desde la base de datos de objeto Además actualiza el índice y la referencia HEAD si se ha cambiado de rama.
Terminología de git (cont.) Fuente: http://progit.org/book/ch3-1.html  (CC-BY-NC-SA 3.0) Estado “inicial” master sigue siendo la rama activa en la copia de trabajo $ git branch testing $ git checkout testing testing pasa a ser la rama activa en la copia de trabajo 1 2 3 4
Terminología de git (cont.) $ git add some-file(s) $ git commit -m ... $ git checkout master $ git add some-file(s) $ git commit -m ... Fuente: http://progit.org/book/ch3-1.html  (CC-BY-NC-SA 3.0) 1 2 3
Terminología de git (cont.) merge: fusionar los contenidos de otra rama (potencialmente desde un repositorio externo) en la rama actual. Si la rama es de otro repositorio, primero se hace un fetch* de la rama y después se fusiona en la rama actual.
La fusión puede crear un nuevo objeto commit si una de las ramas no es un ancestro de la otra.
Si una es ancestro de la otra, simplemente se mueve la referencia de la cabeza de la rama fusionada ( fast-forward merge ).
merge: escenario 1 Fuente: http://progit.org/book/ch3-2.html  (CC-BY-NC-SA 3.0) $ git checkout master $ git merge hotfix $ git branch hotfix master $ git checkout hotfix $ git add …. $ git commit  1 2 3
merge: escenario 2 Fuente: http://progit.org/book/ch3-2.html  (CC-BY-NC-SA 3.0) $ git merge iss53 $ git checkout -b iss53 master $ git add …. $ git commit $ git checkout master $ git add …. $ git commit 1 2 3
Operaciones en el área de trabajo Crear nuevas ramas locales (ultra rápido y baratísimo en disco):  Extraer una rama al área de trabajo: Consultar la rama activa: Mostrar el estado del área de trabajo: Marcar cambios para commit: $ git branch mdl21-nested-groups mdl21-ldap-refactor $ git checkout mdl21-nested-groups $ git branch $ git status $ git add fichero1 fichero2 ... $ git rm fichero3 fichero4 ...
Operaciones en el área de trabajo Mostrar diferencias con el índice o con HEAD:  Mostrar diferencias con otras ramas: Hacer commit de los cambios (marcados):
Usar gitk para visualizar el historial de una rama:
Usar gitk para visualizar el historial de todas las ramas: $ git diff $ git diff HEAD $ git diff MOODLE_21_STABLE $ git diff MOODLE_21_STABLE..mdl21-ldap-refactor $ git commit $ gitk mdl21-nested-group $ gitk --all
Terminología de git (cont.) clone: obtener una copia local completa *  de un repositorio git remoto. Fuente: http://progit.org/book/ch3-5.html  (CC-BY-NC-SA 3.0) * las cabezas de las ramas remotas son inamovibles**
Terminología de git (cont.) fetch: obtener la cabeza de una rama (o varias) desde un repositorio remoto, copiando los objetos falten y moviendo la(s) cabeza(s) remota(s). Fuente: http://progit.org/book/ch3-5.html  (CC-BY-NC-SA 3.0) 1 2

Más contenido relacionado

PDF
Mini-tutorial de git
PDF
WorkShop: Introducción a GIT
PDF
Introducción a git
ODP
Introducción al uso Git y GitHub para trabajo colaborativo
PDF
Git para-principiantes
PPTX
Git / Guía Básica
PDF
Tallerintroducciongit
ODP
Taller breve de introduccion a Git
Mini-tutorial de git
WorkShop: Introducción a GIT
Introducción a git
Introducción al uso Git y GitHub para trabajo colaborativo
Git para-principiantes
Git / Guía Básica
Tallerintroducciongit
Taller breve de introduccion a Git

La actualidad más candente (20)

PPTX
Git: un enfoque práctico
PDF
Git with Scrum en español
PPTX
Introducción a git y git hub
ODP
Git: control de versiones
PPTX
Fundamentos de GIt y Github
PDF
Control de versiones con Git y Github
PDF
Git: Aprovecha las ventajas del control de versiones distribuido
PDF
Curso: Publicando mi proyecto web en Github
PDF
Introducción a Git
PDF
Git y Jenkins. El futuro en la gestión del ciclo de vida de aplicaciones
PDF
Git + Github - Betabeers Córdoba XII
PPTX
Control de versiones con Git
PPTX
Introducción a GIT
PDF
Control de versiones con GIT
PPTX
PPT Git GitHub
PDF
El git nuestro de cada dia
PDF
Herramientas de trabajo para entorno LAMP
PDF
Versionando proyectos con Git, desarrollo de software colaborativo
PDF
LaTeX y Git: ¿Cómo controlar archivos de LaTeX eficientemente?
PDF
05 intro-git-github-heroku-v4
Git: un enfoque práctico
Git with Scrum en español
Introducción a git y git hub
Git: control de versiones
Fundamentos de GIt y Github
Control de versiones con Git y Github
Git: Aprovecha las ventajas del control de versiones distribuido
Curso: Publicando mi proyecto web en Github
Introducción a Git
Git y Jenkins. El futuro en la gestión del ciclo de vida de aplicaciones
Git + Github - Betabeers Córdoba XII
Control de versiones con Git
Introducción a GIT
Control de versiones con GIT
PPT Git GitHub
El git nuestro de cada dia
Herramientas de trabajo para entorno LAMP
Versionando proyectos con Git, desarrollo de software colaborativo
LaTeX y Git: ¿Cómo controlar archivos de LaTeX eficientemente?
05 intro-git-github-heroku-v4
Publicidad

Destacado (9)

PDF
Tunea tu wordpress
PDF
Forjas y repositorios de código en la nube. Euskal Encounter 2015
PDF
Mahara y Moodle - EDUSOL 2011
PDF
10 Claves para mejorar la seguridad de tu WP
PDF
Las claves para optimizar la seguridad de tu sitio WordPress
ODP
Mahoodle (English)
ODP
Lo nuevo de Moodle 2.0 (MoodleMoot Colombia 2010)
ODP
Integración de Mahara con Moodle (MoodleMoot España 2010)
PDF
Monta WordPress en tu empresa
Tunea tu wordpress
Forjas y repositorios de código en la nube. Euskal Encounter 2015
Mahara y Moodle - EDUSOL 2011
10 Claves para mejorar la seguridad de tu WP
Las claves para optimizar la seguridad de tu sitio WordPress
Mahoodle (English)
Lo nuevo de Moodle 2.0 (MoodleMoot Colombia 2010)
Integración de Mahara con Moodle (MoodleMoot España 2010)
Monta WordPress en tu empresa
Publicidad

Similar a Uso de git (Cursos de e-ghost 2011) (20)

PDF
Git & GitHub Part II
PDF
Manual para usuarios de Git @patxiredes.pdf
PPTX
comoManejarGitDesdeLaTerminalConectar.pptx
PDF
Taller Git en la URJC
PDF
The Gift of Git [Español: La Palabra de Git]
ODP
Uso de git para el mantenimiento de parches locales o públicos
PDF
Primeros pasos con git
PDF
GIT presentación de teoría y practica.pdf
PDF
Mejora tu productividad con git
PPTX
GITHUB control de versiones, para el manejo de repositorios versionados
PDF
Presentación GitHub Antonio Luque Bravo y Miguel Ángel Zamora Blanco
PDF
FULL STACK PYTHON - Clase dedicada a GitHub
ODP
Git - Gitlab
PDF
Chuleta Github: La potencia con control !!!!
PPTX
Introducción a git
PPTX
Introducción a GIT
PDF
Dependency Managers
PDF
Git y github básico
PDF
Dependency Managers iOS
Git & GitHub Part II
Manual para usuarios de Git @patxiredes.pdf
comoManejarGitDesdeLaTerminalConectar.pptx
Taller Git en la URJC
The Gift of Git [Español: La Palabra de Git]
Uso de git para el mantenimiento de parches locales o públicos
Primeros pasos con git
GIT presentación de teoría y practica.pdf
Mejora tu productividad con git
GITHUB control de versiones, para el manejo de repositorios versionados
Presentación GitHub Antonio Luque Bravo y Miguel Ángel Zamora Blanco
FULL STACK PYTHON - Clase dedicada a GitHub
Git - Gitlab
Chuleta Github: La potencia con control !!!!
Introducción a git
Introducción a GIT
Dependency Managers
Git y github básico
Dependency Managers iOS

Más de Iñaki Arenaza (10)

PDF
Mejora tu desarrollo web con Firefox Developer Edition y Google Chrome DevTools
PDF
Mahara, el bosón de Higgs, los horizontes de sucesos y los agujeros de gusano
PDF
Forjas de Software: qué son y para que sirven
PDF
Internacionalización con WordPress (WordPress Euskadi 2014)
PDF
Móntate un sitio web completo con WordPress en 4 horas
PDF
Buddypress: Social Networking, in a Box
ODP
Mahoodle moot-colombia-2010
ODP
Moodle: Un ejemplo del modelo de desarrollo y gestión de proyectos open source
PDF
Uso de Mahara con Moodle
PPT
Sesión formativa sobre web 2.0 MGEP-MU (5 y 6 Mayo 2008)
Mejora tu desarrollo web con Firefox Developer Edition y Google Chrome DevTools
Mahara, el bosón de Higgs, los horizontes de sucesos y los agujeros de gusano
Forjas de Software: qué son y para que sirven
Internacionalización con WordPress (WordPress Euskadi 2014)
Móntate un sitio web completo con WordPress en 4 horas
Buddypress: Social Networking, in a Box
Mahoodle moot-colombia-2010
Moodle: Un ejemplo del modelo de desarrollo y gestión de proyectos open source
Uso de Mahara con Moodle
Sesión formativa sobre web 2.0 MGEP-MU (5 y 6 Mayo 2008)

Último (20)

PPTX
historia_web de la creacion de un navegador_presentacion.pptx
PDF
capacitación de aire acondicionado Bgh r 410
PPTX
Acronis Cyber Protect Cloud para Ciber Proteccion y Ciber Seguridad LATAM - A...
PPTX
modulo seguimiento 1 para iniciantes del
PPTX
CLAASIFICACIÓN DE LOS ROBOTS POR UTILIDAD
PPTX
sa-cs-82-powerpoint-hardware-y-software_ver_4.pptx
DOCX
TRABAJO GRUPAL (5) (1).docxsjjsjsksksksksk
PPTX
Mecanismos-de-Propagacion de ondas electromagneticas
DOCX
TRABAJO GRUPAL (5) (1).docxsjsjskskksksksks
PDF
Diapositiva proyecto de vida, materia catedra
PPTX
Presentacion de Alba Curso Auditores Internos ISO 19011
PPTX
Sesion 1 de microsoft power point - Clase 1
PDF
PRESENTACIÓN GENERAL MIPIG - MODELO INTEGRADO DE PLANEACIÓN
PDF
ADMINISTRACIÓN DE ARCHIVOS - TICS (SENA).pdf
PPTX
ccna: redes de nat ipv4 stharlling cande
PDF
Estrategia de Apoyo de Daylin Castaño (5).pdf
PPTX
Diapositivas Borrador Rocha Jauregui David Paolo (3).pptx
PDF
0007_PPT_DefinicionesDeDataMining_201_v1-0.pdf
PPTX
Power Point Nicolás Carrasco (disertación Roblox).pptx
PPT
Protocolos de seguridad y mecanismos encriptación
historia_web de la creacion de un navegador_presentacion.pptx
capacitación de aire acondicionado Bgh r 410
Acronis Cyber Protect Cloud para Ciber Proteccion y Ciber Seguridad LATAM - A...
modulo seguimiento 1 para iniciantes del
CLAASIFICACIÓN DE LOS ROBOTS POR UTILIDAD
sa-cs-82-powerpoint-hardware-y-software_ver_4.pptx
TRABAJO GRUPAL (5) (1).docxsjjsjsksksksksk
Mecanismos-de-Propagacion de ondas electromagneticas
TRABAJO GRUPAL (5) (1).docxsjsjskskksksksks
Diapositiva proyecto de vida, materia catedra
Presentacion de Alba Curso Auditores Internos ISO 19011
Sesion 1 de microsoft power point - Clase 1
PRESENTACIÓN GENERAL MIPIG - MODELO INTEGRADO DE PLANEACIÓN
ADMINISTRACIÓN DE ARCHIVOS - TICS (SENA).pdf
ccna: redes de nat ipv4 stharlling cande
Estrategia de Apoyo de Daylin Castaño (5).pdf
Diapositivas Borrador Rocha Jauregui David Paolo (3).pptx
0007_PPT_DefinicionesDeDataMining_201_v1-0.pdf
Power Point Nicolás Carrasco (disertación Roblox).pptx
Protocolos de seguridad y mecanismos encriptación

Uso de git (Cursos de e-ghost 2011)

  • 1. Iñaki Arenaza [email_address] @iarenaza (Creative Commons Attribution Non-commercial Share Alike 3.0 Spain License) Introducción al uso de
  • 2. Sistemas de Control de Versiones Centralizados (CVCS) Ejemplos: CVS, Subversion, Perforce, SourceSafe, ... Fuente: http://progit.org/book/ch1-1.html (CC-BY-NC-SA 3.0)
  • 3. Sistemas de Control de Versiones Distribuidos (DVCS) Ejemplos: git, Mercurial, Bazaar, BitKeeper,... Fuente: http://progit.org/book/ch1-1.html (CC-BY-NC-SA 3.0)
  • 4. Diferencias versus instantáneas git, Mercurial* Bazaar, Mercurial* Fuente: http://progit.org/book/ch1-3.html (CC-BY-NC-SA 3.0) Fuente: http://progit.org/book/ch1-3.html (CC-BY-NC-SA 3.0)
  • 5. (Algunas) características de git (Casi) todas las operaciones son locales
  • 6. Git tiene integridad fuerte (sha1)
  • 8. Los tres espacios y tres estados Fuente: http://progit.org/book/ch1-3.html (CC-BY-NC-SA 3.0) Modified* Staged Committed
  • 9. Los tres espacios El directorio (repositorio) es donde git almacena los metadatos y la base de datos de objetos para tu proyecto.
  • 10. El directorio de trabajo es una copia de trabajo de una versión del proyecto.
  • 11. El área de preparación (staging area) es un archivo que almacena información sobre lo que irá en el próximo commit. Antes se le llamaba “el índice”.
  • 12. Los tres estados Confirmado/no modificado (committed): los datos están almacenados de manera segura en el directorio.
  • 13. Modificado (modified): se ha modificado el archivo pero todavía no se ha confirmado.
  • 14. Preparado (staged): se ha marcado para confirmación un archivo modificado en su versión actual.
  • 15. Los “tres + 1” estados Fuente: http://progit.org/book/ch2-2.html (CC-BY-NC-SA 3.0) El estado 3+1
  • 16. Terminología de git En los ejemplos siguientes $GIT_DIR contiene la ruta de un repositorio git dado
  • 17. objeto: unidad de almacenamiento en git. Se identifica de forma unívoca por el SHA1 de su contenido.
  • 18. Por tanto, un objeto es inmutable.
  • 19. Tipos de objetos de git blob: objeto sin tipo, para guardar el contenido de un fichero. “Un fichero”.
  • 20. tree: lista de nombres y permisos, junto con las referencias de objetos blob o tree asociados. “Un directorio”.
  • 21. Tipos de objetos de git commit: información de una revisión dada. Incluye: los padres del objeto,
  • 22. la persona que ha realizado el commit de la revisión,
  • 23. el autor de la revisión,
  • 24. la fecha de la misma,
  • 26. el objeto tree que corresponde al directorio raíz de la revisión.
  • 27. Tipos de objetos de git tag: identifica de forma simbólica a otros objetos y puede ser usado para firmar éstos. Contiene: el nombre y tipo de otro objeto,
  • 28. un nombre simbólico (el de la propia tag)
  • 29. puede contener un mensaje asociado.
  • 30. opcionalmente puede incluir una firma (PGP). En este último caso se denomina un "objeto de etiqueta firmada".
  • 31. Terminología de git (cont.) nombre de objeto o identificador de objeto: identificador único del objeto ( de 40 bytes con la representación hexadecimal del SHA1 de su contenido )
  • 32. base de datos de objetos: almacena un conjunto de objetos ( habitualmente en $GIT_DIR/objects/ ).
  • 33. ref o referencia: cadena de 40 bytes con la representación hexadecimal de un SHA1, o un nombre simbólico ( que se almacena en $GIT_DIR/refs/ ) que denota un objeto particular.
  • 34. Terminología de git (cont.) revisión: estado concreto de una serie de ficheros y directorios que ha sido almacenado en la base de datos de objetos. Se hace referencia a él por medio de un objeto commit.
  • 35. padre: un objeto commit contiene una lista (potencialmente vacía) de objetos commit que representan a sus predecesores lógicos en la línea de desarrollo, esto es, sus ancestros.
  • 36. Tipos de objetos de git Fuente: http://progit.org/book/ch3-1.html (CC-BY-NC-SA 3.0)
  • 37. Tipos de objetos de git Fuente: http://progit.org/book/ch3-1.html (CC-BY-NC-SA 3.0)
  • 38. Terminología de git (cont.) repositorio: colección de referencias junto con una base de datos de objetos tiene todos los objetos que son alcanzables desde dichas referencias.: Puede contener además algunos meta datos adicionales usados por determinas órdenes de git.
  • 39. Puede contenier una copia de trabajo de una revisión. repositorio desnudo (bare): repositorio que no tiene una copia de trabajo. Los de control de git que normalmente estarían presentes en el subdirectorio oculto .git están presentes en el propio directorio del repositorio.
  • 40. Terminología de git (cont.) árbol de trabajo o copia de trabajo: Una revisión extraida del repositorio, para poder trabajar con ella.
  • 41. índice: una colección de ficheros con información de stat(2), cuyos contenidos están almacenados como objetos. El índice es una versión almacenada del árbol de trabajo.
  • 42. Terminología de git (cont.) rama: línea activa de desarrollo. El commit más reciente de una rama se denomina la punta de dicha rama. La punta de la rama se referencia por medio de una cabeza.
  • 43. La copia de trabajo está siempre asociada a una rama (la rama "actual" o "checked out") y la cabeza especial “HEAD” apunta a esa rama. cabeza: una referencia con nombre, que apunta al objeto commit de la punta de una rama. Las cabezas se almacenan en $GIT_DIR/refs/heads/, (salvo que se usen referencias empaquetadas).
  • 44. Terminología de git (cont.) checkout: acción de actualizar parte o todo el árbol de trabajo con un objeto árbol o blob desde la base de datos de objeto Además actualiza el índice y la referencia HEAD si se ha cambiado de rama.
  • 45. Terminología de git (cont.) Fuente: http://progit.org/book/ch3-1.html (CC-BY-NC-SA 3.0) Estado “inicial” master sigue siendo la rama activa en la copia de trabajo $ git branch testing $ git checkout testing testing pasa a ser la rama activa en la copia de trabajo 1 2 3 4
  • 46. Terminología de git (cont.) $ git add some-file(s) $ git commit -m ... $ git checkout master $ git add some-file(s) $ git commit -m ... Fuente: http://progit.org/book/ch3-1.html (CC-BY-NC-SA 3.0) 1 2 3
  • 47. Terminología de git (cont.) merge: fusionar los contenidos de otra rama (potencialmente desde un repositorio externo) en la rama actual. Si la rama es de otro repositorio, primero se hace un fetch* de la rama y después se fusiona en la rama actual.
  • 48. La fusión puede crear un nuevo objeto commit si una de las ramas no es un ancestro de la otra.
  • 49. Si una es ancestro de la otra, simplemente se mueve la referencia de la cabeza de la rama fusionada ( fast-forward merge ).
  • 50. merge: escenario 1 Fuente: http://progit.org/book/ch3-2.html (CC-BY-NC-SA 3.0) $ git checkout master $ git merge hotfix $ git branch hotfix master $ git checkout hotfix $ git add …. $ git commit 1 2 3
  • 51. merge: escenario 2 Fuente: http://progit.org/book/ch3-2.html (CC-BY-NC-SA 3.0) $ git merge iss53 $ git checkout -b iss53 master $ git add …. $ git commit $ git checkout master $ git add …. $ git commit 1 2 3
  • 52. Operaciones en el área de trabajo Crear nuevas ramas locales (ultra rápido y baratísimo en disco): Extraer una rama al área de trabajo: Consultar la rama activa: Mostrar el estado del área de trabajo: Marcar cambios para commit: $ git branch mdl21-nested-groups mdl21-ldap-refactor $ git checkout mdl21-nested-groups $ git branch $ git status $ git add fichero1 fichero2 ... $ git rm fichero3 fichero4 ...
  • 53. Operaciones en el área de trabajo Mostrar diferencias con el índice o con HEAD: Mostrar diferencias con otras ramas: Hacer commit de los cambios (marcados):
  • 54. Usar gitk para visualizar el historial de una rama:
  • 55. Usar gitk para visualizar el historial de todas las ramas: $ git diff $ git diff HEAD $ git diff MOODLE_21_STABLE $ git diff MOODLE_21_STABLE..mdl21-ldap-refactor $ git commit $ gitk mdl21-nested-group $ gitk --all
  • 56. Terminología de git (cont.) clone: obtener una copia local completa * de un repositorio git remoto. Fuente: http://progit.org/book/ch3-5.html (CC-BY-NC-SA 3.0) * las cabezas de las ramas remotas son inamovibles**
  • 57. Terminología de git (cont.) fetch: obtener la cabeza de una rama (o varias) desde un repositorio remoto, copiando los objetos falten y moviendo la(s) cabeza(s) remota(s). Fuente: http://progit.org/book/ch3-5.html (CC-BY-NC-SA 3.0) 1 2
  • 58. Terminología de git (cont.) pull: hacer un fetch seguido de un merge, con una rama remota dada.
  • 59. push: enviar los objetos de la rama local que no están en la rama remota a la que hace referencia el pull, y actualizar la cabeza de la rama remota. Es la acción complementaria de pull.
  • 60. Si la cabeza de la rama remota no es un ancestro de la cabeza de la rama local, el push falla*.
  • 61. Operaciones en el área de trabajo Clonar un repositorio “remoto”: $ git clone git://git.moodle.org/moodle.git $ git clone ssh://iarenaza@git.moodle.org/moodle.git $ git clone http://git.moodle.org/moodle.git $ git clone git@github.com:iarenaza/moodle.git $ git clone /ruta/a/moodle.git /ruta/a/otro-moodle.git $ git clone -o moodle.git git@github.com:iarenaza/moodle.git
  • 62. Operaciones en el área de trabajo Incorporar nueva rama del repositorio remoto al repositorio local:
  • 63. Enviar ramas locales al repositorio remoto: Configurar rama para poder hacer pull desde repositorio remoto: $ git push moodle.git mdl21-nested-groups $ git push moodle.git +mdl21-nested-groups $ git push moodle.git mdl21-nested-groups:mdl21-nestgrp $ git config branch.mdl21-nested-groups.remote \ moodle.git $ git config branch.mdl21-nested-groups.merge \ refs/heads/mdl21-nested-groups $ git fetch moodle.git $ git branch mdl21-enrol-database-refactor \ moodle.git/mdl21-enrol-database-refactor
  • 64. Terminología de git (cont.) rebase: re-aplicar una serie de cambios desde una rama en la cabeza de otra rama diferente, y hacer que la cabeza de esa otra rama apunte al resultado. ¡OJO! Rescribe el historial de la rama.
  • 65. Puede ser problemático en ramas publicadas en repositorios remotos.
  • 66. rebase: “limpieza” del historial Estado “inicial” merge tradicional de “master” y “experiment” rebase de “experiment” sobre “master” merge de “master” y “experiment” tras el rebase 1 2 3 4
  • 67. Limpieza del historial IMPORTANTE: No hace rebase de los cambios de una rama si ésta ha sido publicada en otro repositorio.
  • 68. Limpieza del historial Sólo se puede aplicar a la rama activa:
  • 69. Si hay conflictos, solucionar a mano, y decirle a git qué hemos arreglado:
  • 70. Podemos abortar en todo momento: $ git checkout wip-mdl21-enrol-db-refactor $ git rebase MOODLE_21_STABLE $ editar enrol/database/config.html $ git add enrol/database/config.html enrol/database/enrol.php $ editar xxxx $ git add xxxxx $ git rebase --continue $ git rebase --abort
  • 71. Creación de parches y series Creación de parches monolíticos:
  • 72. Creación de series de parches: $ git checkout mdl21-enrol-db-refactor $ git diff MOODLE_21_STABLE > mdl21-enrol-db-refactor.diff $ git checkout mdl21-enrol-database-refactor $ git format-patch -o serie-enrol-db MOODLE_21_STABLE $ git format-patch -o -s -10 mdl21-enrol-db
  • 73. Ejemplo de modelo de trabajo Para mantener modificaciones locales de Moodle en Mondragon Unibertsitatea
  • 74. Premisas del modelo de trabajo Repositorio 'compartido' de referencia
  • 75. Premisas del modelo de trabajo Aprovechar el repositorio de git.moodle.org No usar 'git clone' para la importación desde git.moodle.org
  • 76. Premisas del modelo de trabajo Repositorio compartido sólo con ramas locales
  • 77. Premisas del modelo de trabajo Desarrollo siempre en las ramas locales
  • 78. Premisas del modelo de trabajo Ramas estándar sólo en repositorios de los desarrolladores
  • 79. git.moodle.org repositorio compartido @mondragon.edu copia de trabajo + repositorio desarrollador git-remote + git-push git-fetch git-push git-pull git-fetch git-push git-pull git-remote + git-fetch git-fetch / git-pull git-clone git-clone git-remote + git-fetch git-fetch / git-pull git-fetch git-push git-pull
  • 80. Creación repositorio compartido $ git config --global user.name 'Desarrollador-1' $ git config --global user.email 'desa-1@mondragon.edu' $ cd /ruta/repositorio/desarrollador $ mkdir desarrollador-1.git $ cd desarrollador-1.git $ git init Crear repositorio primer desarrollador
  • 81. Creación repositorio compartido Importar repositorio de moodle.org $ git remote add -t master -t MOODLE_21_STABLE \ -m master moodle-org \ git://git.moodle.org/moodle.git $ git fetch moodle-org
  • 82. Creación repositorio compartido Ramas locales de seguimiento (opcional) $ git branch --track master moodle-org/master $ git branch --track MOODLE_21_STABLE \ moodle-org/MOODLE_21_STABLE
  • 83. Creación repositorio compartido Crear ramas locales de trabajo $ git branch mdl21-ldap-refactor moodle-org/MOODLE_21_STABLE
  • 84. Creación repositorio compartido Crear repositorio compartido $ cd /ruta/repositorio/compartido $ mkdir compartido.git $ cd compartido.git $ git --bare init --shared=all $ chmod g=rwxs,o=rx . $ sudo chgrp -R git-moodle .
  • 85. Creación repositorio compartido Enviar rama local al repositorio compartido $ cd /ruta/repositorio/desarrollador/desarrollador-1.git $ git remote add compartido \ /ruta/repositorio/compartido/compartido.git $ git push compartido mdl21-ldap-refactor
  • 86. Creación repositorio compartido Configurar rama local para hacer pull desde repositorio compartido $ git config branch.mdl21-ldap-refactor.remote \ compartido $ git config branch.mdl21-ldap-refactor.merge \ refs/heads/mdl21-ldap-refactor
  • 87. Creación repo nuevo desarrollador Clonar repositorio compartido $ git config --global user.name 'Desarrollador-2' $ git config --global user.email 'desa-2@mondragon.edu' $ cd /ruta/repositorio/desarrollador $ git clone -o compartido \ /ruta/repositorio/compartido/compartido.git \ desarrollador-2.git
  • 88. Creación repo nuevo desarrollador Importar ramas estándar (opcional) $ cd desarollador-2.git $ git remote add -t master -t MOODLE_21_STABLE \ -m master moodle-org \ git://git.moodle.org/moodle.git $ git fetch moodle-org
  • 89. Creación repo nuevo desarrollador Crear ramas locales de trabajo $ git branch mdl21-ldap-refactor \ compartido/mdl21-ldap-refactor $ git checkout mdl21-ldap-refactor
  • 90. Algunos trucos bajo la manga (bonus track ☺) git add --interactive
  • 92. git stash [save | list | show | apply | remove | clear]
  • 95. git gc, git prune, git fsck
  • 97. Algunas direcciones de interés git Cheat Sheets: http://devcheatsheet.com/tag/git/ github/GITORIOUS: http://github.com/