Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Upcoming SlideShare
What to Upload to SlideShare
What to Upload to SlideShare
Loading in …3
×
1 of 70

Control de versiones con git

0

Share

Download to read offline

Mi presentación en el Seminario Desarrollo de Software Local en el marco de la República Digital, San Francisco de Marcorís, República Dominicana.

Related Books

Free with a 30 day trial from Scribd

See all

Related Audiobooks

Free with a 30 day trial from Scribd

See all

Control de versiones con git

  1. 1. Eudris Cabrera @eudriscabrera 03 Junio 2017, UASD Recinto San Francisco, San Francisco, R. D. Control de Versión Con
  2. 2. Graduado de Ingeniería Telemática en la PUCMM. Entusiasta de la tecnología y el software libre, desarrollador Java, instructor ocasional (Java / Linux), aficionado del béisbol/sóftbol y los bailes latinos. En el tiempo libre, escribe artículos, realiza charlas, participa en eventos tecnológicos y ayuda en la revisión de documentación técnica en el mundo Java y el código abierto. Eudris Cabrera
  3. 3. ❏ Antecedentes / Prácticas Obsoletas ❏ Control de versión ❏ Sistemas de control de versiones ❏ Alternativas y variantes de sistemas de control de versiones ❏ Evolución ❏ Necesidad de control de versiones ❏ Git ❏ Introducción ❏ Comandos básicos ❏ Recomendaciones ❏ Conclusiones Contenido
  4. 4. Antecedentes Si alguna vez ha colaborado con otras personas en un proyecto, usted sabe la frustración de constante intercambio de archivos. Los programadores a través del tiempo han usado diversos métodos para compartir su código fuente en un ambiente de desarrollo colaborativo, a continuación algunas de las soluciones más usadas:
  5. 5. ❏ Mantener un backup en computadoras o servidores diferentes, así como también, guardar copia en disco compactos o disco externos. ❏ Crear aplicaciones in-house para manejar las versiones de tu código, quizás sea una buena opción pero está reinventando la rueda, ya que existen opciones open source para manejar versiones. ❏ Guardar los fuentes en Dropbox. Una solución usada en los últimos tiempos por los programadores. Dropbox internamente funciona como un manejador de versiones pero tiene sus limitantes en el uso que puede darle un desarrollador. Prácticas Obsoletas
  6. 6. Las soluciones anteriores pueden tener su utilidad y dar resultados aceptables, sin embargo, es recomendable usar una solución general, diseñada para mantener tu código a salvo y de forma centralizada, como lo hacen los sistemas de control de versiones.
  7. 7. Control de Versión
  8. 8. Control de versión es ... La gestión de los diversos cambios que se realizan sobre los elementos de algún producto o una configuración del mismo.
  9. 9. El control de versiones es útil para guardar cualquier documento que cambie con frecuencia, como una novela, libro o el código fuente de un programa.
  10. 10. Sistemas de control de versiones
  11. 11. Sistema de control de versiones ... Es un software que administra el acceso a un conjunto de archivos, y mantiene un historial de cambios realizados.
  12. 12. ¿Cómo funciona ? Normalmente consiste en una copia maestra en un repositorio, y un programa cliente con el que cada usuario SINCRONIZA SU COPIA LOCAL Esto permite compartir los cambios sobre un mismo conjunto de archivos.
  13. 13. El repositorio guarda registro de los cambios realizados por cada usuario, y permite volver a un estado anterior en caso de ser necesario.
  14. 14. Características
  15. 15. Un sistema de control de versiones debe proporcionar: ❏ Mecanismo de almacenamiento de los elementos que deba gestionar (ej. archivos de texto,imágenes, documentación, código fuente, etc...) ❏ Posibilidad de realizar cambios sobre los elementos almacenados (ej. modificaciones parciales, añadir, borrar, renombrar o mover elementos, fusionar cambios,etc. ) ❏ Registro histórico de las acciones realizadas con cada elemento o conjunto de elementos (normalmente pudiendo volver o extraer un estado anterior del producto)
  16. 16. Clasificación
  17. 17. Alternativas y variantes de sistemas de control de versiones ... Basado en la forma de almacenamiento de los repositorios, se clasifican en dos grandes tipos: centralizados y distribuidos.
  18. 18. Centralizados Existe un repositorio central de todo el código, del cual es responsable un único usuario (o conjunto de ellos). Algunos ejemplos son CVS y Subversion.
  19. 19. Flujo de Trabajo Centralizado
  20. 20. SE FACILITAN LAS TAREAS ADMINISTRATIVAS a cambio de reducir la potencia y flexibilidad, pues todas las decisiones fuertes (como crear una nueva rama) necesitan la aprobación del responsable.
  21. 21. Distribuidos Cada usuario tiene su propio repositorio. Los distintos repositorios pueden intercambiar y mezclar revisiones entre ellos. Ejemplos:
  22. 22. Flujo de trabajo distribuido
  23. 23. Es frecuente el uso de un repositorio, que está normalmente disponible, que sirve de punto de sincronización de los distintos repositorios locales.
  24. 24. Evolución
  25. 25. Popularidad DEVELOPER PRODUCTIVITY REPORT 2012
  26. 26. ❏ Repositorio ❏ Version o Revisión ❏ Conflicto ❏ Resolver ❏ Rama Principal (Trunk, Master) ❏ Branches o bifurcaciones (ramas) ❏ Tag o Rotulado (Etiquetado) ❏ Merge o Fusión ❏ Publicar, Confirmar o Enviar (commit, check-in) ❏ Lista de cambios (changelist, changeset, patch) ❏ Actualización (sync ó update) Terminologías comunes
  27. 27. ¿Por qué son necesarios?
  28. 28. Necesidad de un control de versiones ... ❏ Exigencia de mantener y llevar el control de los cambios realizados. ❏ Requisito de trabajar en distintas ramas al mismo tiempo, introduciendo cambios, tanto en la linea de desarrollo como en la de producción. ❏ Es absolutamente necesario para el trabajo en equipo, resulta útil incluso a desarrolladores independientes.
  29. 29. Introducción a git
  30. 30. Git Es un sistema de control de versiones gratuito y de código abierto, diseñado para ser usado desde pequeños a grandes proyectos con rápidez y eficiencia.
  31. 31. Desarrolladores: Junio Hamano, Linus Torvalds y otros más. Url: http://git-scm.com Diseñador: Linus Torvalds Programado en C Bourne Shell, Perl1 Licencia : GNU GPL v2 Versión inicial: 07 de abril 2005
  32. 32. Inicialmente diseñado y desarrollado por Linus Torvalds para el desarrollo del Kernel de Linux, ha sido adoptado por otros proyectos, algunos de mucha relevancia en el mundo del código abierto y el software libre como: PostgreSQL, gnome, Perl, Eclipse, Ruby on Rails, KDE, Android y muchos más. Linus Torvalds
  33. 33. Git ofrece un tipo de control de versiones diferente, un sistema de control de versiones distribuido. No hay una sola base de código centralizada para tirar el código, sino que diferentes ramas sostienen las diferentes partes del código. Sistemas de control de versiones, como SVN y CVS, utilizan el control de versiones centralizado, lo que significa que hay una única copia original del software.
  34. 34. Empresas que están usando git para el control de versiones ..... Google, Facebook, Twitter, Microsoft, Linkedin, Netflix, Atlassian, OpenShift (Red Hat), Heroku, entre muchas más.
  35. 35. SVN vs GIT
  36. 36. GitHub ha ayudado a establecer Git como un gran sistema de control de versiones, ofreciendo una hermosa interfaz para muchos proyectos grandes, como Ruby on Rails, Netty y otros más. Sin embargo, Git no es tan fácil de aprender como CVS o SVN, así que es mucho más difícil de usar para un principiante. Más información en: https://github.com
  37. 37. Además de Github, existen otras empresas que ofrecen servicios de alojamiento para repositorios git. Las más populares Atlassian Bitbucket y GitLab. https://bitbucket.org https://about.gitlab.com
  38. 38. Comandos Básicos
  39. 39. Configuración de un repositorio
  40. 40. Creación de un repositorio git init Este comando crea un nuevo repositorio Git. Se puede utilizar para convertir un proyecto existente sin versionar a un repositorio Git o inicializar un repositorio nuevo vacío. Muchos de los comandos de Git no se pueden ejecutar fuera de un repositorio, usualmente este es el primer comando que corre en un nuevo proyecto. Uso $ git init $ git init <ruta del directorio> Crea un subdirectorio .git en directorio actual o directorio especificado mediante una ruta, que contiene todos los metadatos necesarios para el repositorio.
  41. 41. Clonación de un repositorio Git existente git clone Este comando copia un repositorio Git existente. Como ventaja, la clonación crea automáticamente una conexión remota llamada origin que apuntan al repositorio remoto. Esto hace que sea muy fácil de interactuar con un repositorio central. Uso $ git clone <repositorio> Clonar el repositorio ubicado en <repositorio> en la máquina local. El repositorio original puede encontrarse en el sistema de archivos local o en un equipo remoto accesible a través de HTTP o SSH. $ git clone <repositorio> <ruta del directorio> Clonar el repositorio ubicado en <repositorio> en el directorio ubicado en la ruta <ruta del directorio> en la máquina local.
  42. 42. Clonando un repositorio Si un proyecto ya ha sido establecido en un repositorio central, el comando git clone es la forma más común de los usuarios obtener una copia de desarrollo. Al igual que git init, la clonación es generalmente una operación de una sola vez, una vez el desarrollador ha obtenido una copia de trabajo, todas las operaciones de control de versiones y colaboraciones se gestionan a través de su repositorio local.
  43. 43. Guardando cambios en el repositorio Para crear un commit inicial del directorio actual, utilice los dos comandos siguientes: $ git add . $ git commit Una vez que tenga su proyecto hacia arriba y corriendo, se pueden añadir usando el comando git add: $ git add Hello.java $ git commit Los comandos anteriores también pueden ser utilizados para registrar cambios en los archivos existentes.
  44. 44. Configuración de un repositorio de Git para la colaboración remota Una vez que tenga una configuración de repositorio remota, deberá agregar una URL de repositorio remota a su configuración git local y establecer la rama remota de tu repositorio local. El comando git remote ofrece esta utilidad: $ git remote add <nombre_remoto> <url_repositorio_remoto> Este comando mapeará el repositorio remoto en <url_repositorio_remoto> a una referencia en su repositorio local en <nombre_remoto>.
  45. 45. Colaboración de repositorio a repositorio Una vez que haya mapeado el repositorio remoto, puedes enviar los cambios locales hacia él. $ git push -u <nombre_remoto> <nombre_rama_local> Este comando enviará los cambios de su rama local en <nombre_rama_local> al repositorio remoto en <nombre_remoto>.
  46. 46. Configuración de Git Además de configurar una URL de repositorio remoto, también puede ser necesario configurar las opciones de configuración globales de Git, como nombre de usuario o correo electrónico. git config Este comando se utiliza para definir muchos datos de configuración de Git, desde información de usuario a las preferencias para el comportamiento de un repositorio. Uso : git config [opciones] $ git config user.name <nombre> Definir el nombre del autor que se utilizará para todos los commits en el repositorio actual.
  47. 47. Configuración de Git git config Por lo general, usted querrá usar la opción --global para establecer las opciones de configuración para el usuario actual. Uso $ git config --global user.name <nombre> Definir el nombre del autor que se utilizará para todos los commits por parte del usuario actual. $ git config --global user.email <email> Definir el correo electrónico del autor que se utilizará para todos los commits por el usuario actual.
  48. 48. Configuración de Git git config $ git config --global alias.<nombre-alias> <comando-git> Crear un acceso directo para un comando de Git. $ git config --system core.editor <editor> Definir el editor de texto utilizado por algunos comandos git para todos los usuarios de la máquina actual. $ git config --global --edit Abre el archivo de configuración global en un editor de texto para su edición manual.
  49. 49. Ejemplo git config #Información sobre el usuario $ git config --global user.name "Eudris Cabrera" $ git config --global user.email eudris@example.com #Especificar el editor de texto $ git config --global core.editor vim
  50. 50. Ejemplo git config #Agregar alias estilo SVN $ git config --global alias.st status $ git config --global alias.co checkout $ git config --global alias.br branch $ git config --global alias.up rebase $ git config --global alias.ci commit
  51. 51. Guardando cambios
  52. 52. Cómo guardar los cambios git add Este comando agrega un cambio en el directorio de trabajo al área de ensayo (staging). El comando git add le indica a Git que desea incluir cambios a un archivo en particular en la próxima confirmación. Sin embargo, git add no afecta al repositorio con cambios significativos, en realidad, los cambios no están registrados hasta que se ejecuta git commit. Uso git add <archivo> Agrega todos los cambios en <archivo> para la próxima confirmación.
  53. 53. Cómo guardar los cambios git add <directorio> Agrega todos los cambios en <directorio> para la próxima confirmación. git add -p De forma interactiva permite seleccionar partes de un archivo que se suman a la próxima confirmación. Puedes auxiliarte del comando git status para determinar cuales archivos o directorios pueden ser agregados.
  54. 54. Cómo guardar los cambios Staging Area El área de ensayo (Staging Area) es una de las características más singulares de GIT. En lugar de enviar todos los cambios que haya realizado desde la última confirmación, el staging area permite agrupar cambios antes de ser confirmados en el proyecto. Esto significa que puede realizar todo tipo de modificaciones en archivos no relacionados, deshacer los cambios y separarlo en unidades logicas mediante la agrupación de cambios relacionados, y de esta forma puede realizar confirmaciones pieza por pieza.
  55. 55. Cómo guardar los cambios git commit El comando git commit confirma los cambios que se encuentran en el staging area hacia la historia del proyecto. Esta confirmación pueden ser considerados como versiones "seguras" de un proyecto de Git, nunca van a cambiar a menos que explícitamente pida que lo haga. Aunque comparte el mismo nombre con svn commit, su funcionalidad es diferente, git commit realiza una confirmación a un repositorio local y no requiere ninguna interacción con otros repositorios git.
  56. 56. Cómo guardar los cambios Uso git commit Confirma los cambios que se encuentran en el staging area. Abrirá un editor de texto que le pide un mensaje de confirmación. Después de introducir un mensaje, guardar el archivo y cierre el editor para realizar la confirmación. git commit -m "<mensaje>" Confirma los cambios que se encuentran en el staging area, pero en lugar de lanzar el editor de texto, usa el mensaje "<mensaje>" como el mensaje de confirmación.
  57. 57. Cómo guardar los cambios git commit -a Confirma todos los cambios que se encuentran en el directorio de trabajo. Esto sólo incluye modificaciones a los archivos rastreados (los que se han añadido con git add en algún momento de su historia).
  58. 58. Inspección de un repositorio
  59. 59. Inspección de un repositorio git status Este comando muestra el estado del directorio de trabajo. Uso $ git status
  60. 60. Inspección de un repositorio git log Muestra un historial de los commits realizados. Uso $ git log Muestra todo el historial de los commits realizados utilizando el formato predeterminado. $ git log -n <limite> Limitar el número de commits especificando la cantidad máxima a mostrar en el parámetro <límite>. Por ejemplo, git log -n 3 mostrará sólo 3 commits.
  61. 61. Inspección de un repositorio git log $ git log --oneline Condensa cada commit de una sola línea. Esto es útil para obtener una visión general de alto nivel de la historia del proyecto. $ git log --stat Junto con la información del registro de git log, incluyen los que se alteraron los archivos y el número relativo de las líneas que se han añadido o eliminado de cada uno de ellos.
  62. 62. Deshacer cambios
  63. 63. git checkout Este comando sirve para tres funciones distintas: revisar archivos, revisar confirmaciones (commits) y revisar ramas (branches). Cuando hacemos un checkout de un commit, estamos haciendo que el directorio de trabajo completo se iguale con el commit. Esto puede ser usado para ver un estado anterior de su proyecto sin alterar su estado actual de ninguna manera. Un checkout de un archivo permite ver una versión antigua de ese archivo en particular, dejando el resto de su directorio de trabajo sin tocar.
  64. 64. Uso git checkout master Volver a la rama principal. Esto es, volver al estado "actual" del proyecto. git checkout <commit> <archivo> Vuelve a una versión previa del archivo. Esto es, toma el <archivo> que se encuentra en directorio de trabajo y lo convierte en una copia exacta de como estaba al momento de la confirmación <commit>. git checkout <commit> Actualizar todos los archivos en el directorio de trabajo para que coincida con la confirmación especificada. Puede utilizar un hash de una confimación o una etiqueta como el argumento <commit>.
  65. 65. Otros comandos utiles ❏ git revert ❏ git reset ❏ git clean
  66. 66. Trabajando en equipo ❏ git remote ❏ git fetch ❏ git pull ❏ git push
  67. 67. ❏ No utilizar el control de versiones como un sistema de backup. ❏ Enviar los cambios al servidor cuando conformen una unidad lógica. ❏ Ser preciso en los comentarios. ❏ Mantener la rama principal de proyecto sin errores de compilación. Recomendaciones
  68. 68. ❏ Desarrollar un software implica invertir mucho tiempo y dinero. No proteger el código fuente con un sistema de control de versiones es irresponsable y puede traer graves consecuencias. ❏ Cualquier persona que trabaje con archivos que son sometidos a cambios constantemente pueden beneficiarse del uso de los sistemas de control de versiones para guardar copias de sus archivos, diseños, libros, etc. ❏ Existen sistemas de control de versiones de código abierto, libre distribución y amplia documentación, lo que permite su fácil implementación y curva de aprendizaje. Conclusiones
  69. 69. Enlaces: ❏ http://en.wikipedia.org/wiki/Git_(software) ❏ https://git.wiki.kernel.org/index.php/GitSvnComparsion ❏ https://www.atlassian.com/git/tutorials ❏ http://www.desarrolloweb.com/articulos/introduccion-git-github.html ❏ https://git-scm.com/ ❏ https://www.codeschool.com/learn/git ❏ https://education.github.com/pack Referencias
  70. 70. @eudriscabrera @eudris @ecabrerar @eudriscabrera Eudris Cabrera Rodríguez Ingeniero Telemático Desarrollador de Software / Consultor Informático eudris@gmail.com https://www.linkedin.com/in/eudriscabrera http://www.slideshare.net/eudris https://twitter.com/eudriscabrera https://github.com/ecabrerar

×