Introducción a GIT

1.421 visualizaciones

Publicado el

Introducción a GIT. Seminario para la asignatura Arquitectura del Software. Escuela Ingeniería Informática. Universidad de Oviedo

Publicado en: Educación

Introducción a GIT

  1. 1. Universidad de Oviedo Arquitectura del Software Universidad de Oviedo Arquitectura del Software Escuela de Ingeniería Informática Seminario: GIT 2014 Jose Emilio Labra Gayo
  2. 2. Universidad de Oviedo Arquitectura del Software Sistemas de control de versiones Centralizados Un repositorio centralizado de todo el código Ejemplos: CVS, Subversion,... Escuela de Ingeniería Informática Distribuidos Cada usuario tiene su propio repositorio Ejemplos: mercurial, git, ...
  3. 3. Universidad de Oviedo Arquitectura del Software Git Diseñado por Linus Torvalds (Linux), 2005 Objetivos: Aplicaciones con gran nº de archivos de código Eficiencia Escuela de Ingeniería Informática Trabajo distribuido Cada desarrollador tiene su propio repositorio Copia local de todo el historial de cambios Es posible realizar commit's incluso sin conexión Desarrollo no lineal (ramificaciones)
  4. 4. Universidad de Oviedo Arquitectura del Software Componentes locales 3 componentes locales: Directorio de trabajo local Índice: área de ensayo (stage). A veces también caché. Historial: Almacena versiones ó commits Escuela de Ingeniería Informática HEAD (versión más reciente) add commit rm Directorio trabajo local Índice stage area HEAD Historial Commits
  5. 5. Universidad de Oviedo Arquitectura del Software Ramas Ramas feature-2 feature-1 Git facilita gestión de ramas develop hotfix-1 master tags 0.1 master = rama inicial Escuela de Ingeniería Informática Operaciones: Crear ramas (branch) Cambiar a ramas (checkout) Combinar (merge) Etiquetar (tag) Múltiples estilos de ramificación 0.2 1.0
  6. 6. Universidad de Oviedo Arquitectura del Software Repositorios remotos Se pueden conectar con repositorios remotos origin = inicial push add commit Escuela de Ingeniería Informática rm Directorio trabajo local Índice stage area Máquina Local HEAD Historial Commits clone fetch pull Repositorio remoto origin
  7. 7. Escuela de Ingeniería Informática Universidad de Oviedo Arquitectura del Software init clone config add commit status log diff
  8. 8. Universidad de Oviedo Arquitectura del Software init - Crear repositorios git init Transforma el directorio actual en repositorio Git Se crea directorio .git Variantes: Escuela de Ingeniería Informática git init <directorio> Crea un repositorio vacío en el directorio especificado git init --bare <directorio> Inicializa repositorio Git pero omite directorio de trabajo NOTA: Normalmente, esta instrucción sólo se realiza una vez
  9. 9. Universidad de Oviedo Arquitectura del Software clone - Clonar repositorios git clone <repo> Clonar el repositorio <repo> en la máquina local <repo> puede estar en una máquina remota Ejemplo: Escuela de Ingeniería Informática git clone https://github.com/Arquisoft/ObservaTerra0.git NOTA: Al igual que init, esta instrucción sólo se realiza una vez
  10. 10. Universidad de Oviedo Arquitectura del Software config - Configurar git git config --global user.name <name> Declara el nombre de usuario Otras opciones de configuración: user.email, merge.tool, core.editor, ... Escuela de Ingeniería Informática Ficheros de configuración: <repo>/.git/config ~/.git/config -- Específicos de repositorio -- Globales
  11. 11. Universidad de Oviedo Arquitectura del Software add - Añadir al índice git add <fichero> git add <dir> Añade fichero o directorio al índice Escuela de Ingeniería Informática Variantes git add --all = Añade/borra ficheros El índice ó área de ensayo almacena copias de los ficheros antes de ser incluidos en el historial
  12. 12. Universidad de Oviedo Arquitectura del Software commit - Añadir al historial git commit git commit -m "mensaje" Añade los ficheros del índice al historial Escuela de Ingeniería Informática Crea una nueva instantánea "snapshot" del proyecto Cada instantánea tiene un identificador SHA1 Puede recuperarse posteriormente Pueden asignarse etiquetas para facilitar su gestión NOTA: Conviene excluir de control de versiones algunos ficheros Ejemplos: binarios (*.class), temporales, configuración (.settings), privados (claves de Bases de datos...), etc. Se incluyen en fichero: .gitignore
  13. 13. Universidad de Oviedo Arquitectura del Software status - Observar índice git status Muestra ficheros staged, unstaged y untracked Escuela de Ingeniería Informática staged = en índice pero no en historial unstaged = modificados pero no añadidos a índice untracked = en directorio de trabajo
  14. 14. Universidad de Oviedo Arquitectura del Software log - Observar historial git log Muestra historial de cambios Escuela de Ingeniería Informática Variantes git git git git git log log log log log --oneline --stat -p --autor="expr" --grep="expr" Resumen en 1 línea Estadísticas Camino completo con diff Commits de un autor Busca commits git log --graph --decorate --online Muestra grafo de cambios
  15. 15. Universidad de Oviedo Arquitectura del Software diff - Mostrar diferencias git diff Dir. trabajo vs índice git diff --cached git diff git diff --cached Índice vs commit Escuela de Ingeniería Informática git diff HEAD Dir. trabajo vs commit Algunas pciones: --color-words --stat Directorio trabajo Índice HEAD git diff HEAD
  16. 16. Universidad de Oviedo Arquitectura del Software Escuela de Ingeniería Informática Comandos para deshacer cambios checkout revert reset clean
  17. 17. Universidad de Oviedo Arquitectura del Software checkout - Cambiar Cambia directorio de trabajo git checkout <c> Cambiar a commit <c> Escuela de Ingeniería Informática Se pasa a estado "detached HEAD" git checkout <c> <f> Recupera fichero <f> de commit <c> NOTA: checkout también se utiliza para cambiar a diferentes ramas
  18. 18. Universidad de Oviedo Arquitectura del Software revert - Recuperar git revert <c> Recupera commit <c> Añade la versión recuperada al historial Operación "segura" Escuela de Ingeniería Informática permite rastrear cambios en historial
  19. 19. Universidad de Oviedo Arquitectura del Software reset - Deshacer Deshacer cambios Operación no segura Escuela de Ingeniería Informática git reset git reset --hard git reset <c> Deshace cambios en índice Deshace cambios en índice y directorio trabajo Deshacer cambios y recuperar commit <c> NOTA: Es peligroso hacer reset en repositorios ya publicados Es mejor utilizar revert
  20. 20. Universidad de Oviedo Arquitectura del Software clean - Limpiar Borrar ficheros locales git clean -f Borra ficheros untracked Escuela de Ingeniería Informática NOTA: Peligroso (se pueden perder cambios locales) git clean -n Muestra qué ficheros se borrarían
  21. 21. Escuela de Ingeniería Informática Universidad de Oviedo Arquitectura del Software branch checkout merge
  22. 22. Universidad de Oviedo Arquitectura del Software branch - Ramas Gestión de ramas git branch git branch <r> Muestra las ramas existentes Crear la rama <r> Escuela de Ingeniería Informática git branch -d <r> Borrar rama <r> Segura (no borra si no hay mezclas pendientes) git branch -D <r> Borrar rama <r> Insegura (borra una rama y sus commits) git branch -m <r> Renombrar rama actual a <r>
  23. 23. Universidad de Oviedo Arquitectura del Software checkout - Cambiar Cambiar a una rama Escuela de Ingeniería Informática git checkout <r> Cambia a la rama existente <r> git checkout master Cambia a rama master git checkout -b <r> Crear rama <r> y cambia a ella Equivalente a git branch <r> git checkout <r>
  24. 24. Universidad de Oviedo Arquitectura del Software merge - Combinar Combinar dos ramas Escuela de Ingeniería Informática git merge <r> Mezclar rama actual con <r> git merge --no-ff <r> Mezclar generando commit de mezcla (más seguro) 2 tipos de combinación Merge fast-forward 3-way merge
  25. 25. Universidad de Oviedo Arquitectura del Software merge fast-forward Cuando hay camino lineal entre rama actual y rama a mezclar Antes Rama r desarrollada En rama master r Escuela de Ingeniería Informática master Después de git merge master r master
  26. 26. Universidad de Oviedo Arquitectura del Software 3 way merge Cuando las ramas divergen y no se puede hacer fast-forward Antes Rama r desarrollada En rama master master Escuela de Ingeniería Informática Si aparecen conflictos: Mostrar: git status Editar/corregir git add . git commit r Después de git merge r r master
  27. 27. Escuela de Ingeniería Informática Universidad de Oviedo Arquitectura del Software commit --amend rebase reflog
  28. 28. Universidad de Oviedo Arquitectura del Software Commit -amend Modificar un commit git commit --amend Escuela de Ingeniería Informática Permite añadir nuevos ficheros del índice al commit actual NOTA: Se recomienda no hacerlo en commit's públicos
  29. 29. Universidad de Oviedo Arquitectura del Software rama rama rebase - Mover rama master git rebase <c> Mover rama actual a commit <c> Permite que los cambios de una rama se basen en los cambios de otras ramas Escuela de Ingeniería Informática rama rama git checkout rama git rebase master git checkout master git merge rama master master NOTA: Se recomienda no hacer rebases sobre commits ya publicados
  30. 30. Universidad de Oviedo Arquitectura del Software rebase interactivo git rebase -i Controla qué commits se mantienen en el historial Escuela de Ingeniería Informática Puede utilizarse para limpiar el historial Aparece un editor con varas instrucciones: pick - utilizar commit tal cual reword - modificar mensaje de commit squash - utilizar commit pero hacer que no se vea ...
  31. 31. Universidad de Oviedo Arquitectura del Software reflog - movimientos en historial git reflog Muestra movimientos del historial Escuela de Ingeniería Informática git almacena información de todos los movimientos que se producen en las diferentes ramas git reflog muestra los cambios aunque ya no estén en ninguna rama
  32. 32. Escuela de Ingeniería Informática Universidad de Oviedo Arquitectura del Software remote fetch pull push
  33. 33. Universidad de Oviedo Arquitectura del Software remote - Conectar repositorios git remote Ver repositorios externos git remote add <nombre> <uri> Crear conexión de nombre <nombre> a <uri> Escuela de Ingeniería Informática git remote rm <nombre> Borrar conexión <nombre> git rename <anterior> <nuevo> Renombrar conexión <anterior> a <nuevo> NOTAS: git clone crea automáticamente una conexión llamada origin Es posible tener conexiones a más de un repositorio externo
  34. 34. Universidad de Oviedo Arquitectura del Software fetch - traer Traer elementos de repositorio remoto Permite descargar ramas externas Operación segura: no mezcla con ficheros locales git fetch <remote> Escuela de Ingeniería Informática Descargar todas las ramas del repositorio <remote> git fetch <remote> <rama> Descargar la rama <rama> de repositorio <remote> NOTA: Asigna FETCH_HEAD a cabeza de rama traída Convenio para nombrar ramas: <remoto>/<rama> Ejemplo: origin/master
  35. 35. Universidad de Oviedo Arquitectura del Software pull - traer y mezclar git pull <remoto> Trae un repositorio remoto y lo mezcla Equivale a: Escuela de Ingeniería Informática git fetch git merge FETCH_HEAD
  36. 36. Universidad de Oviedo Arquitectura del Software push - enviar git push <remoto> <rama> Enviar commits de repositorio local a remoto Variantes git push <remoto> --all Escuela de Ingeniería Informática Enviar todas las ramas Si hay cambios en repositorio remoto, muestra un error (non-fast-forward). Solución: 1. Traer (pull) cambios y mezclar con repositorio local 2. Volver a enviar (push) NOTA: También puede usarse opción: --force (no recomendado)
  37. 37. Universidad de Oviedo Arquitectura del Software Herramientas Git Escuela de Ingeniería Informática git - Línea de comandos gitk interfaz gráfico
  38. 38. Escuela de Ingeniería Informática Universidad de Oviedo Arquitectura del Software EGit - Entorno para Eclipse
  39. 39. Escuela de Ingeniería Informática Universidad de Oviedo Arquitectura del Software SourceTree
  40. 40. Universidad de Oviedo Arquitectura del Software Tortoise Git Escuela de Ingeniería Informática Se integra con explorador de Windows
  41. 41. Universidad de Oviedo Arquitectura del Software Otras herramientas http://git-scm.com/downloads/guis Gestión de diferencias y mezclas Escuela de Ingeniería Informática p4merge kdiff
  42. 42. Universidad de Oviedo Arquitectura del Software Github Herramienta de codificación social Compañía Github Inc. creada en 2008 2013: >3 millones de usuarios, >5millones proyectos Escuela de Ingeniería Informática Gestión gratuita de proyectos de código abierto Proyectos públicos por defecto y gratis Es posible tener proyectos privados pagando
  43. 43. Universidad de Oviedo Arquitectura del Software Github Facilidades como repositorio de proyectos Gestión de issues/milestones Wiki Seguimiento de repositorios, usuarios, etc. Escuela de Ingeniería Informática Pull Requests Solicitar combinaciones y mezclas Revisiones de código Permite incluir comentarios, ver diferencias, etc. Gestión de listas de pull requests
  44. 44. Universidad de Oviedo Arquitectura del Software Referencias Tutoriales Escuela de Ingeniería Informática http://rogerdudler.github.com/git-guide/ https://www.atlassian.com/git http://training.github.com/materials/slides/ http://nvie.com/posts/a-successful-git-branchingmodel/ Vídeos http://vimeo.com/49444883

×