Introducción al uso de



Documentos relacionados
Git The fast version control system

GIT Dinahosting 3. Hola!

Conceptos Repositorio, repository Repositorio local Repositorio remoto origin Revisión, parche, commit Commit ID

Manual para el uso de GIT Los siguientes pasos indican el procedimiento para entrar a GIT y para agregar la llave pública.

Escenarios de trabajo en Git

El Zen de git. Un taller de introducción al uso de git del humilde sensei Psicobyte para la honorable Oficina de Software Libre de la UGR.

Tema 12 Control de versiones

GUIA COMPLEMENTARIA PARA EL USUARIO DE AUTOAUDIT. Versión N 02 Fecha: 2011-Febrero Apartado: Archivos Anexos ARCHIVOS ANEXOS

Control de versiones con Subversion

David Pérez Jaén. Aplicado a la Automatización Industrial

Git. Introduccion a Git: Un Sistema de control de versiones. ...bien hecho. Gabriel Saldaña gabriel@gabrielsaldana.org

Tutorial: Primeros Pasos con Subversion

Contenido. Curso de subversion. Problemas comunes. Problemas: Situación: Introducción a los sistemas de control de versiones

Qué es un sistema de control de versiones y cómo afecta directamente en vuestra felicidad?

REPOSITORIOS. Ing. Ismael Castañeda Fuentes, MSc Grupo de Investigación UNBD Universidad Nacional de Colombia Marzo de 2011

La tortuga y los documentos: Tortoise + Subversion

Enginyeria del Software III ( ) CONTROL DE VERSIONES CON SUBVERSION. Roberto García Despatx EPS 3.15

GENERACIÓN DE TRANSFERENCIAS

Guía de usuario. Docentes. Autoservicio de PowerCAMPUS

Uso practico de CVS para control de versiones

CVS Concurrent Versions System Manual de Usuario

Oficina Online. Manual del administrador

Guía de instalación de la carpeta Datos de IslaWin

Capítulo 9. Archivos de sintaxis

Hasta ahora Microsoft disponía de dos sistemas operativos diferentes: entorno personal Windows98. entorno profesional Windows NT/2000.

CAPÍTULO 4. EL EXPLORADOR DE WINDOWS XP

Subversion: Desarrollo colaborativo

Control de Versiones

WINDOWS 98/Me EL EXPLORADOR DE WINDOWS IV

SMS Gestión. manual de uso

Servicio de Alta, Baja, Modificación y Consulta de usuarios Medusa

Páginas web ::: Edición web en línea con Kompozer Diseño de materiales multimedia. Web Edición web en línea con Kompozer

GENERACIÓN DE ANTICIPOS DE CRÉDITO

CAPITULO 8. Planeamiento, Arquitectura e Implementación

Ministerio de Educación,Cultura y Deporte. Aulas en Red. Windows. Módulo 2: Servicios Básicos. Directorio Activo

DOCENTES FORMADORES UGEL 03 PRIMARIA

Control de versiones con git Más allá del commit. Mario Sánchez Prada

Programas que permiten gestionar un repositorio de archivos y sus distintas versiones Utilizan una arquitectura cliente-servidor

Sistemas de archivos distribuidos. Alvaro Ospina Sanjuan

Gestión de Retales WhitePaper Noviembre de 2009

INDICE. 1. Introducción El panel Entities view El panel grafico Barra de botones Botones de Behavior...

Manual hosting acens

Acronis Universal Restore

1. Creación del repositorio

Guía de instalación de la carpeta Datos de ContaWin

INSTALACIÓN DE GITLAB

28.- Manejo de los Feriados

PROCESO SERVICIOS INFORMÁTICOS Y DE TELECOMUNICACIONES. Versión: 02 GUIA PARA PUBLICACIÓN DE DOCUMENTOS EN LA WEB Página 1de 6.

Qué ventajas presenta Google Drive para catedráticos y alumnos?

ARQUITECTURA DE DISTRIBUCIÓN DE DATOS

PSI Gestión es un sistema multiusuario que le permite 2 tipos de configuraciones:

Si haces clic sobre el icono de un objeto que no ha sido instalado como por ejemplo acceso remoto, comenzará su asistente de instalación.

Guía rápida del usuario. Dolibarr.es ERP/CRM versión1.0

Desarrollo de Sage Como modificar y mejorar el programa. Miguel Angel Marco Buzunariz Jarandilla de la Vera 1 de Junio de 2014

Escudo Movistar Guía Rápida de Instalación Dispositivos Symbian

MANUAL DE USO DE CORREO ELECTRÓNICO, CALENDARIO Y CONTACTOS

Qué es un servicio de Proxy?

Manual para usuarios USO DE ONEDRIVE. Universidad Central del Este

Social Coding GIT - El control de versiones es la gestión de los diversos cambios que se realizan sobre algún archivo, en este caso, código.

Creación y administración de grupos de dominio

MANUAL DE USO DE LA APLICACIÓN

Eurowin 8.0 SQL. Manual del módulo TALLAS Y COLORES

Manual CMS Mobincube

SUBVERSION Y SUBCLIPSE

Taller de Git y GitHub desde cero

Copia de Seguridad en windows


TPV Táctil. Configuración y Uso. Rev /01/09

Guías _SGO. Gestione administradores, usuarios y grupos de su empresa. Sistema de Gestión Online

Elementos requeridos para crearlos (ejemplo: el compilador)

1.- MENU DE CONTROL O MENU VENTANA: permite cerrar la ventana cambiarla de tamaño y pasar a otra ventana

PowerPoint 2010 Manejo de archivos

MANUAL DE USUARIO SISTEMA DE ALMACEN DIF SONORA

Instructivo para descarga del código fuente

Manual de usuario del Centro de Control

Sociedad de Seguros de Vida del Magisterio Nacional. Sistema de Pignoraciones Web. Manual de Usuario. Marzo, 2012.

GUÍA PARA INICIAR UN TRÁMITE DESDE LA OFICINA VIRTUAL

Proyecto Fortalecimiento de las capacidades TIC en PyMEs y Gobiernos Locales mediante el uso de software libre Manual de Instalación Openbravo POS

UNIVERSIDAD COOPERATIVA DE COLOMBIA POSTGRADO MULTIMEDIA PARA LA DOCENCIA ELECTIVA I CREACIÓN DE AMBIENTES VIRTUALES

Desarrollo de software en comunidad: Forja de código + Subversion (SVN)

Guía de Instalación. Glpi

Autor: Microsoft Licencia: Cita Fuente: Ayuda de Windows

COPIAS DE SEGURIDAD MARFIL CONTABILIDAD

Anexo B. Comunicaciones entre mc y PC

Administración de la producción. Sesión 10: Gestor de Base de Datos (Access)

TciSatSingleW32 Versión 3.1

Edición 1 ES. Nokia y Nokia Connecting People son marcas comerciales registradas de Nokia Corporation

Manual de usuario investigador

Reparar diagramas FUP o MMI con errores de código desde un Backup anterior.

RELACIÓN DE PRÁCTICAS DEL TEMA 2

GUÍA RÁPIDA DE TRABAJOS CON ARCHIVOS.

CREACIÓN O MIGRACIÓN DEL CORREO POP A IMAP PARA MOZILLA THUNDERBIRD

Cuando hacemos uso de los grupos, se tendrán los permisos asignados al grupo, en todas las carpetas y documentos del sitio.

Plastic SCM platform. Plastic SCM es el nombre que engloba toda la gama de productos de Gestión de Configuración de Códice Software.

Subversion (SVN) Sistema de Control de Versiones Sucesor de CVS

Manual de rol gestor de GAV para moodle 2.5

Sistema de Facturación de Ventas WhitePaper Enero de 2007

Informática 4º ESO Tema 1: Sistemas Informáticos. Sistemas Operativos (Parte 2)

Transcripción:

Introducción al uso de Iñaki Arenaza iarenaza@mondragon.edu @iarenaza (Creative Commons Attribution Non-commercial Share Alike 3.0 Spain License)

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) 2

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) 3

Diferencias versus instantáneas Bazaar, Mercurial* Fuente: http://progit.org/book/ch1-3.html (CC-BY-NC-SA 3.0) git, Mercurial* Fuente: http://progit.org/book/ch1-3.html (CC-BY-NC-SA 3.0) 4

(Algunas) características de git (Casi) todas las operaciones son locales Git tiene integridad fuerte (sha1) Git (generalmente) sólo añade datos 5

Los tres espacios y tres estados Fuente: http://progit.org/book/ch1-3.html (CC-BY-NC-SA 3.0) Modified* Staged Committed 6

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. 7

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. 8

El estado 3+1 Los tres + 1 estados Fuente: http://progit.org/book/ch2-2.html (CC-BY-NC-SA 3.0) 9

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. 10

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. 11

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. 12

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". 13

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. 14

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. 15

Tipos de objetos de git Fuente: http://progit.org/book/ch3-1.html (CC-BY-NC-SA 3.0) 16

Tipos de objetos de git Fuente: http://progit.org/book/ch3-1.html (CC-BY-NC-SA 3.0) 17

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. 18

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. 19

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). 20

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. 21

Terminología de git (cont.) 1 Estado inicial 2 $ git branch testing 3 master sigue siendo 4 la rama activa en la copia de trabajo $ git checkout testing testing pasa a ser la rama activa en la copia de trabajo Fuente: http://progit.org/book/ch3-1.html (CC-BY-NC-SA 3.0) 22

Terminología de git (cont.) 1 2 $ git add some-file(s) $ git commit -m... $ git checkout master 3 $ git add some-file(s) $ git commit -m... Fuente: http://progit.org/book/ch3-1.html (CC-BY-NC-SA 3.0) 23

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). 24

merge: escenario 1 1 2 3 $ git branch hotfix master $ git checkout hotfix $ git add. $ git commit $ git checkout master $ git merge hotfix Fuente: http://progit.org/book/ch3-2.html (CC-BY-NC-SA 3.0) 25

merge: escenario 2 1 2 $ git checkout -b iss53 master $ git add. $ git commit $ git checkout master $ git add. $ git commit $ git merge iss53 3 Fuente: http://progit.org/book/ch3-2.html (CC-BY-NC-SA 3.0) 26

Operaciones en el área de trabajo Crear nuevas ramas locales (ultra rápido y baratísimo en disco): $ git branch mdl21-nested-groups mdl21-ldap-refactor Extraer una rama al área de trabajo: $ git checkout mdl21-nested-groups Consultar la rama activa: $ git branch Mostrar el estado del área de trabajo: $ git status Marcar cambios para commit: $ git add fichero1 fichero2... $ git rm fichero3 fichero4... 27

Operaciones en el área de trabajo Mostrar diferencias con el índice o con HEAD: $ git diff $ git diff HEAD Mostrar diferencias con otras ramas: $ git diff MOODLE_21_STABLE $ git diff MOODLE_21_STABLE..mdl21-ldap-refactor Hacer commit de los cambios (marcados): $ git commit Usar gitk para visualizar el historial de una rama: $ gitk mdl21-nested-group Usar gitk para visualizar el historial de todas las ramas: $ gitk --all 28

Terminología de git (cont.) clone: obtener una copia local completa * de un repositorio git remoto. * las cabezas de las ramas remotas son inamovibles** Fuente: http://progit.org/book/ch3-5.html (CC-BY-NC-SA 3.0) 29

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). 1 2 Fuente: http://progit.org/book/ch3-5.html (CC-BY-NC-SA 3.0) 30

Terminología de git (cont.) pull: hacer un fetch seguido de un merge, con una rama remota dada. 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. Si la cabeza de la rama remota no es un ancestro de la cabeza de la rama local, el push falla*. 31

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 32

Operaciones en el área de trabajo Incorporar nueva rama del repositorio remoto al repositorio local: $ git fetch moodle.git $ git branch mdl21-enrol-database-refactor \ moodle.git/mdl21-enrol-database-refactor Enviar ramas locales al 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 Configurar rama para poder hacer pull desde repositorio remoto: $ git config branch.mdl21-nested-groups.remote \ moodle.git $ git config branch.mdl21-nested-groups.merge \ refs/heads/mdl21-nested-groups 33

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. Puede ser problemático en ramas publicadas en repositorios remotos. 34

rebase: limpieza del historial 1 2 Estado inicial merge tradicional de master y experiment 3 rebase de 4 experiment sobre master merge de master y experiment tras el rebase 35

Limpieza del historial IMPORTANTE: No hace rebase de los cambios de una rama si ésta ha sido publicada en otro repositorio. 36

Limpieza del historial Sólo se puede aplicar a la rama activa: $ git checkout wip-mdl21-enrol-db-refactor $ git rebase MOODLE_21_STABLE Si hay conflictos, solucionar a mano, y decirle a git qué hemos arreglado: $ editar enrol/database/config.html $ git add enrol/database/config.html enrol/database/enrol.php $ editar xxxx $ git add xxxxx $ git rebase --continue Podemos abortar en todo momento: $ git rebase --abort 37

Creación de parches y series Creación de parches monolíticos: $ git checkout mdl21-enrol-db-refactor $ git diff MOODLE_21_STABLE > mdl21-enrol-db-refactor.diff Creación de series de parches: $ 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 38

Ejemplo de modelo de trabajo Para mantener modificaciones locales de Moodle en Mondragon Unibertsitatea 39

Premisas del modelo de trabajo Repositorio 'compartido' de referencia 40

Premisas del modelo de trabajo Aprovechar el repositorio de git.moodle.org No usar 'git clone' para la importación desde git.moodle.org 41

Premisas del modelo de trabajo Repositorio compartido sólo con ramas locales 42

Premisas del modelo de trabajo Desarrollo siempre en las ramas locales 43

Premisas del modelo de trabajo Ramas estándar sólo en repositorios de los desarrolladores 44

git.moodle.org git-remote + git-fetch git-fetch / git-pull git-remote + git-fetch git-fetch / git-pull copia de trabajo + repositorio desarrollador git-remote + git-push git-push git-fetch git-pull git-clone git-push git-fetch git-pull git-clone git-push git-fetch git-pull repositorio compartido @mondragon.edu 45

Creación repositorio compartido Crear repositorio primer desarrollador $ 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 git.moodle.org git-remote + git-fetch git-fetch / git-pull git-remote + git-fetch git-fetch / git-pull copia de trabajo + repositorio desarrollador git-remote + git-push git-push git-fetch git-pull git-clone git-push git-fetch git-pull git-clone git-push 46 git-fetch git-pull

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 git.moodle.org git-remote + git-fetch git-fetch / git-pull git-remote + git-fetch git-fetch / git-pull copia de trabajo + repositorio desarrollador git-remote + git-push git-push git-fetch git-pull git-clone git-push git-fetch git-pull git-clone git-push git-fetch git-pull repositorio compartido @mondragon.edu 47

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 48

Creación repositorio compartido Crear ramas locales de trabajo $ git branch mdl21-ldap-refactor moodle-org/moodle_21_stable 49

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. git.moodle.org git-remote + git-fetch git-fetch / git-pull git-remote + git-fetch git-fetch / git-pull copia de trabajo + repositorio desarrollador git-remote + git-push git-push git-fetch git-pull git-clone git-push git-fetch git-pull git-clone git-push git-fetch git-pull repositorio compartido @mondragon.edu 50

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 git.moodle.org git-remote + git-fetch git-fetch / git-pull git-remote + git-fetch git-fetch / git-pull copia de trabajo + repositorio desarrollador git-remote + git-push git-push git-fetch git-pull git-clone git-push git-fetch git-pull git-clone git-push git-fetch git-pull repositorio compartido @mondragon.edu 51

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 52

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 git.moodle.org git-remote + git-fetch git-fetch / git-pull git-remote + git-fetch git-fetch / git-pull copia de trabajo + repositorio desarrollador git-remote + git-push git-push git-fetch git-pull git-clone git-push git-fetch git-pull git-clone git-push git-fetch git-pull repositorio compartido @mondragon.edu 53

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 git.moodle.org git-remote + git-fetch git-fetch / git-pull git-remote + git-fetch git-fetch / git-pull copia de trabajo + repositorio desarrollador git-remote + git-push git-push git-fetch git-pull git-clone git-push git-fetch git-pull git-clone git-push git-fetch git-pull repositorio compartido @mondragon.edu 54

Creación repo nuevo desarrollador Crear ramas locales de trabajo $ git branch mdl21-ldap-refactor \ compartido/mdl21-ldap-refactor $ git checkout mdl21-ldap-refactor 55

Algunos trucos bajo la manga (bonus track ) git add --interactive git cherry-pick git stash [save list show apply remove clear] git bisect git blame git gc, git prune, git fsck.git/hooks/* 56

Algunas direcciones de interés git Cheat Sheets: http://devcheatsheet.com/tag/git/ github/gitorious: http://github.com/ http://gitorious.org/ gitosis: https://secure.wikimedia.org/wikibooks/en/wiki/git/gitosis http://thinkshout.com/blog/2011/03/lev/redmine-and-gitosis-projectmanagement-nirvana Gerrit: https://code.google.com/p/gerrit/ Jenkins: http://jenkins-ci.org/ 57