viernes, 4 de octubre de 2019

Git para matemáticos 1: Introducción, configuración inicial.

Esta es la primera de una serie de entradas donde hablo de una herramienta que aprendí a usar hace relativamente poco: git.
  1. Introducción y instalación y configuración inicial.
  2. Repositorios locales y web.
  3. Comandos básicos y el día-a-día.
  4. Submódulos (pendiente).
  5. Ramas (pendiente).
  6. Git y Overleaf (pendiente).
Disclaimer: Esto no pretende ser un tutorial completo de cómo usar git y no solo eso, es muy probable que los conceptos no sean exactamente como los platico en estas entradas. Yo no soy un experto en git y más bien me enfocaré en cómo lo uso en la práctica. Si crees que algo de lo que digo puede mejorar, déjalo en un comentario. Por otro lado, la mayoría de lo que diga llevará referencias, pero si algo no queda claro, por favor, házmelo saber.
Me enfocaré en los usos prácticos para alguien que jamás ha usado git. Si tú ya lo usas con frecuencia pero te enfrentas a algunos de mis problemas, las referencias en los enlaces deberían ayudarte.

Introducción y el cómo acabé en esto.

Voy a tratar de ser lo más concreto posible. Git es un controlador de versiones super popular entre la gente que se dedica a hacer programación. De hecho, me atrevería a decir que prácticamente cualquier proyecto de software suficientemente serio usa git para su desarrollo. Incluso muchos que no son suficientemente serios.

La idea detrás de git es que funciona local y no es centralizado. ¿Qué quiere decir esto? Que en general, no es necesario tener una "copia principal" del proyecto. Cada colaborador puede (y debería) tener una versión del proyecto en su propia computadora sobre la cual puede trabajar y después usar git para que las cosas se mezclen sin hacer un desastre.

La mayoría de los matemáticos no tenemos grandes proyectos de software a nuestro cargo. Muchos de nosotros apenas y sabemos programar. Sin embargo, sí hay algo que casi todos nosotros hacemos: escribir artículos/tesis/tareas/reportes, etc. Además, muchas veces estos incluyen colaboración con más de una persona. Así que una vez que averigüé de qué iba Git, me pareció que escribir un artículo con varias personas debería ser pan comido. Así que me surgió la pregunta natural ¿por qué no la usa todo mundo? Creo que la respuesta más natural que se me ocurre es que Git parece ser muy complicado.

Y no me malinterpreten, no es complicado pero sí es un poco más complicado que usar Dropbox o Overleaf, dos de las herramientas que entre mis conocidos son las populares pare realizar la tarea de compartir y administrar archivos (). Del primero puedo hablar bastante, hasta hace poco era mi plataforma favorita para administrar mi trabajo. Del segundo, no sé mucho, pero pienso de hablar de él en una entrada futura. Permítanme contarles el problema particular que me animó a echarme un clavado a git:

Uso Bibtex para administrar la bilbiografía que uso (si no saben qué es, den click en el nombre al inicio de la linea, no se arrepentirán). Durante años, en mi carpeta de Dropbox hubo un archivo bib.bib que servía de base de datos para los artículos que usualmente uso como referencia. Dado que ya es una base de datos bastante grande, cada que iniciaba un nuevo proyecto simplemente copiaba este archivo a la carpeta de Dropbox asociada al proyecto. Sin embargo, hacer esto hace que haya un problema de inconsistencia.

Para fines del ejemplo suponga que tengo una carpeta que se llama tesis y una carpeta que se llama artículo. Suponga además que artículo está compartida con Coautor Pérez. Entonces al iniciar el proyecto en artículo copio el archivo bib.bib a artículo. Luego Coautor agrega algunas entradas a este archivo. Unos días después inicio el proyecto tesis y copio mi archivo bib.bib en este nuevo proyecto. Nota que ahora tengo dos archivos bib.bib en mi sistema: el original y el modificado por Coautor que es ligeramente más grande. Digamos que a medio proyecto tesis decido usar algunas de las entradas añadidas por Coautor. Si tengo suerte, copie el archivo más grande dentro de tesis si no, entonces las añado a mi archivo y ahora tengo probablemente tres archivos bib.bib distintos. Supongan ahora que en lugar de solo dos proyectos, tengo 5 que van cambiando con el tiempo y eso ¿ven el potencial desastre que viene?. Esto se resolvería fácilmente si pudiéramos usar algo como enlaces, de tal forma que cuando modificamos alguno de los archivos bib, todos los demás se actualizan a ese, pero resulta que en Dropbox los enlaces no funcionan bien.

Resulta que este problema se resuelve muy bien a través de submodulos, de los cuales también hablaré en alguna entrada futura. Por ahora voy a dejar la motivación por aquí y me voy a enfocar en el primer uso de git para alguien que jamás lo ha usado.

Instalación de git y configuración incial.

Para detalles finos acerca de lo que voy a decir, sugiero consultar la documentación de git. En particular, para fines de la instalación sugiero consultar este enlace.

Quizás este sea un buen momento para mencionar que yo encuentro mucho más fácil usar git en la linea de comandos. Sé que hay herramientas gráficas pero no las conozco lo suficiente como para escribir estas entradas con ellas. Tal vez luego las explore y escriba de ellas, pero luego. No voy a suponer que sabes hacer muchísimo en la línea de comandos (a la que llamaré más de una vez consola), pero sí que sabes qué es, cómo abrirla en tu computadora y como copiar código de aquí y pegarlo en la consola.

Instalación en Linux

Si tu sistema es ubuntu o algo similar, simplemente basta usar los comandos usuales:

$ sudo apt-get install git-all

Aunque lo más probable es que ya esté instalado en tu sistema.

Instalación en Windows y Mac

Resulta que tanto para Windows y para Mac existen paqueterías completas que instalan Git. Parece ser que la de windows incluso tiene interfaz gráfica. Yo no uso ninguno de estos dos sistemas, así que me disculpo por no conocer ninguno de los usos en ellos, pero de cualquier manera, estoy seguro que lo que voy a decir en lo que resta de esta entrada y en las potenciales siguientes servirán una vez que git esté instalado.
  • Paquetería para Mac aquí.
  • Paquetería para Windows aquí.

Configuración inicial.

Asumiré ahora que ya tienes git instalado en tu computadora. Hay que hacer una configuración básica para proceder. Para ello introduciremos nuestros primeros comandos en git. En general, la estructura de un comando de git es la siguiente

$ git comando [opciones]

Por esta ocasión exploraremos el comando config el cual tiene esencialmente tres maneras de actuar: global, local y system, las cuales se explicarán con ejemplos. Para más detalles acerca de este comando ver este enlace.

La opción system determina las opciones del sistema a usarse, global las del usuario y local las del repositorio específico. Tal vez ahorita esas palabras no hagan mucho sentido, pero es bueno mantener esto en mente. Si las opciones entran en conflicto, local sobre escribe global y ésta a su vez sobre escribe system.

Por ejemplo, los siguientes comandos configuran el nombre de usuario a nivel global, el correo electrónico que quedará en el registro a nivel local y el editor de texto por defaul a nivel sistema. Las primeras dos configuraciones son útiles para llevar el registro de quién hace cambios en los archivos y la última para que git ejecute el comando adecuado cuando necesita abrir un editor de texto. Note que podría valer la pena configurar el email a nivel global también.

$ git config --global user.name "Pito Perez"
$ git config --local user.email "pito@perez.mx"
$ git config --system core.editor "kate"

No hay comentarios.:

Publicar un comentario