¿Qué es GitHub? Más que control de versiones de Git en la nube

GitHub es en el fondo un servicio de alojamiento de repositorios de Git, es decir, un sistema de control de versiones o de gestión de código fuente basado en la nube, pero eso es solo el comienzo. Además, GitHub implementa funciones para la revisión de código (solicitudes de extracción, diferencias y solicitudes de revisión), gestión de proyectos (incluido el seguimiento y asignación de problemas), integraciones con otras herramientas para desarrolladores, gestión de equipos, documentación y "codificación social".

Algo así como un sitio de redes sociales para programadores, GitHub es un entorno abierto donde los programadores pueden compartir y colaborar libremente (incluso ad hoc) en código fuente abierto. GitHub facilita la búsqueda de código útil, la copia de repositorios para su propio uso y el envío de cambios a los proyectos de otros. Como resultado, GitHub se ha convertido en el hogar de prácticamente todos los proyectos de código abierto de importancia.

Siempre que quiero explorar un proyecto de código abierto, empiezo por buscar el nombre del proyecto. Una vez que encuentro el sitio web del proyecto, busco su enlace de repositorio de código y nueve de cada diez veces termino en GitHub.

Control de versiones de Git

Antes de que podamos comprender lo que hace GitHub y cómo funciona GitHub, debemos comprender Git. Git es un sistema de control de versiones distribuido, originalmente escrito por Linus Torvalds en 2005 para y con la ayuda de la comunidad del kernel de Linux. No estoy aquí para venderte Git, así que te ahorraré la perorata sobre lo rápido, pequeño, flexible y popular que es, pero debes saber que cuando clonas un repositorio de Git ("repositorio", para abreviar) obtiene el historial de versiones completo en su propia computadora, no solo una instantánea de una rama a la vez.

Git comenzó como una herramienta de línea de comandos, acorde con su origen en la comunidad del kernel de Linux. Aún puede usar la línea de comando de Git, si lo desea, pero no es necesario. En lugar de o además de la línea de comandos, puede usar el cliente GitHub gratuito en Windows o Mac, o cualquiera de las otras GUI para Git, o un editor de código que se integre con Git. Todas estas opciones son inicialmente más fáciles de usar que la línea de comandos. La línea de comandos de Git viene preinstalada en la mayoría de los sistemas Mac y Linux y es compatible con todas las operaciones; las GUI suelen admitir un subconjunto de operaciones de Git de uso frecuente.

Git se diferencia de los sistemas de control de versiones más antiguos, como Subversion, en que está distribuido en lugar de centralizado. También es bastante rápido, especialmente porque la mayoría de las operaciones se realizan en su repositorio local. Sin embargo, el uso de Git agrega un nivel de complejidad: enviar código a su repositorio local y enviar sus confirmaciones a un repositorio remoto son pasos separados. Cuando los equipos olvidan esto (o no se les enseñó al respecto), puede llevar a situaciones en las que diferentes desarrolladores están trabajando con bases de código que divergen.

Un repositorio de Git remoto puede estar en un servidor o puede estar en la máquina de otro desarrollador. Eso permite muchos flujos de trabajo posibles para los equipos. Un flujo de trabajo común implica el uso de un repositorio de servidor como repositorio "bendecido", al que solo se compromete código revisado y bien probado, a menudo a través de una solicitud de extracción emitida desde el repositorio de un desarrollador.

Funcionalidad de GitHub

Ya he notado que GitHub es un servidor Git basado en la nube para alojamiento de código y codificación social, y que implementa funciones para revisión de código (solicitudes de extracción, diferencias y solicitudes de revisión), gestión de proyectos (incluido el seguimiento y la asignación de problemas), integraciones con otras herramientas de desarrollo, gestión de equipos y documentación.

La última innovación en codificación social de GitHub es el compromiso de los coautores , lo que se logra agregando uno o más avances de "coautoría por" al final de un mensaje de compromiso. Este mecanismo no afecta el núcleo del repositorio per se, y no cambia el aspecto del repositorio en Git simple, pero en GitHub, Chrome mostrará múltiples confirmadores en la lista de confirmaciones y le dará crédito a cada coautor en su gráfico de contribución.

Si lo desea, puede extender GitHub usando la API GraphQL de GitHub. Esta es una mejora significativa con respecto a la API anterior de GitHub, que se basaba en llamadas REST.

GitHub Enterprise

GitHub.com es un servicio de alojamiento en la nube que puede manejar una variedad de tipos de cuentas: cuentas de desarrollador gratuitas (solo repositorios públicos) y pagadas ($ 7 por mes), equipos ($ 9 por usuario por mes) y empresas ($ 21 por usuario por mes). ). Si desea ejecutar GitHub Enterprise en las instalaciones o en su propia instancia de nube en AWS, Microsoft Azure, Google Cloud Platform o IBM Cloud, puede hacerlo por el mismo precio de $ 21 por usuario al mes que una cuenta empresarial alojada. GitHub Enterprise agrega algunas características útiles, como la mensajería en la aplicación para los usuarios y el aprovisionamiento de acceso integrado con los directorios LDAP, pero renuncia al SLA de tiempo de actividad del 99.95 por ciento de GitHub.com para las cuentas comerciales alojadas.

GitHub frente a Bitbucket

GitHub no es el único servicio Git mejorado alojado, y GitHub Enterprise no es el único producto local para empresas. Atlassian Bitbucket compite con ambos, con precios ligeramente más bajos y con un nivel de equipo gratuito de cinco miembros que incluye repositorios privados ilimitados y el uso de Bitbucket Pipelines para una integración continua. GitHub es un sitio más popular para proyectos de código abierto y tiene un grupo mucho mayor de desarrolladores de código abierto. El precio de Bitbucket es más favorable para las pequeñas empresas emergentes.

GitHub frente a GitLab

GitLab compite con GitHub y Bitbucket, tanto alojados como locales. En la superficie, GitLab parece tener más funcionalidad de ciclo de vida que los demás, pero la diferencia con Atlassian desaparece principalmente si incluye Jira cuando evalúa Bitbucket. GitLab ofrece funciones en la nube del plan Gold para proyectos de código abierto de forma gratuita, pero esa funcionalidad adicional realmente no compensa la gran comunidad de desarrolladores de código abierto en GitHub.

Escritorio de GitHub

GitHub Desktop, que se muestra a continuación, facilita la administración de sus repositorios de GitHub.com y GitHub Enterprise. Si bien no implementa todas las características de la línea de comandos de Git y la GUI web de GitHub, implementa todas las operaciones que realizará a diario desde su escritorio mientras contribuye a los proyectos. Por lo general, clonarás repositorios de GitHub a GitHub Desktop, los sincronizarás según sea necesario, crearás ramas para tu trabajo, confirmarás tu trabajo y, ocasionalmente, revertirás una o más confirmaciones.

Para trabajar con repositorios para los que carece de privilegios de compromiso y colaboración, normalmente comienza por bifurcar el repositorio en GitHub y clonar la bifurcación en su escritorio. Luego, agrega las ramas que necesita en GitHub Desktop, confirma los cambios que desee, prueba su trabajo, envía las confirmaciones a su repositorio bifurcado remoto y finalmente genera una solicitud de extracción al proyecto principal.

Puede ver el botón Pull Request en la esquina superior derecha de la interfaz de GitHub Desktop. También puede ver muchas confirmaciones en el proyecto Neo4j que fueron fusiones de ramas o solicitudes de extracción. Eso es típico de los proyectos de código abierto con pocos confirmadores y muchos contribuyentes.

Editor de átomo

Puede usar cualquier editor de programación que desee para editar código, incluido el editor Atom de código abierto, gratuito y pirateable de GitHub (que se muestra a continuación), que se integra bien con GitHub y GitHub Desktop. Puede utilizar Atom en MacOS, Windows o Linux. Puede abrir Atom desde GitHub Desktop haciendo clic derecho en el repositorio que desea explorar o editar.

Atom se envía con aproximadamente 90 paquetes, cuatro temas de interfaz de usuario y ocho temas de sintaxis. Puede agregar cualquiera de los 7,000 paquetes y 2,000 temas a su instalación de Atom. Los paquetes pueden admitir lenguajes de programación específicos, como TypeScript, o agregar funcionalidad, como Hydrogen, un entorno de codificación interactivo que admite Python, R, JavaScript y otros núcleos de Jupyter.

Atom está construido con HTML, JavaScript, CSS y la integración de Node.js. Se ejecuta en Electron, un marco para crear aplicaciones multiplataforma utilizando tecnologías web. GitHub Desktop también se ejecuta en Electron.

Proyectos de GitHub

Los proyectos de software de código abierto a menudo necesitan formas de hacer cumplir el control de calidad y, al mismo tiempo, aceptar contribuciones externas al equipo central de confirmadores. La necesidad de colaboradores es enorme, pero traer nuevos colaboradores al proyecto mientras se mantiene la integridad del código base es una tarea difícil y potencialmente peligrosa. Al mismo tiempo, la necesidad de comentarios de los usuarios del proyecto también es enorme.

GitHub tiene una serie de mecanismos que pueden ayudar a engrasar las ruedas de los proyectos de código abierto. Por ejemplo, los usuarios pueden agregar problemas al proyecto en GitHub para informar errores o solicitar funciones. Algunos otros sistemas llaman a estos tickets . Los gerentes de proyectos que trabajan con problemas pueden generar listas de tareas, asignar problemas a colaboradores específicos, mencionar a otros colaboradores interesados ​​para que se les notifique de los cambios, agregar etiquetas y agregar hitos.

Para contribuir a un proyecto, básicamente comienza desde una rama principal del tema que contiene los cambios confirmados que desea agregar a la rama base del proyecto e inicializa una solicitud de extracción desde la rama principal, como se muestra a continuación. Luego empuja sus confirmaciones y las agrega a la rama del proyecto. Otros colaboradores pueden revisar los cambios propuestos, agregar comentarios de revisión, contribuir a la discusión de la solicitud de extracción y agregar sus propias confirmaciones a la solicitud de extracción.

Una vez que todos los involucrados estén contentos con los cambios propuestos, un confirmador puede fusionar la solicitud de extracción. La fusión puede preservar todas las confirmaciones, aplastar todos los cambios en una única confirmación o reajustar las confirmaciones de la rama principal a la rama base. Si la fusión genera conflictos, puede resolverlos en GitHub o usando la línea de comando.

Las revisiones de código en GitHub permiten que un equipo distribuido colabore de forma asincrónica. Las herramientas de GitHub útiles para los revisores incluyen diffs (la mitad inferior de la captura de pantalla a continuación), historial (la mitad superior) y vista de culpa (una forma de ver la evolución de un archivo confirmado por compromiso). Las discusiones de código en GitHub entran en comentarios que se presentan en línea con sus cambios de código. Si las herramientas integradas no son suficientes para su proyecto, puede agregar herramientas de revisión de código e integración continua desde el mercado de GitHub. Los complementos de Marketplace suelen ser gratuitos para proyectos de código abierto.

Gists de GitHub

Los gists son repositorios especiales de GitHub para compartir su trabajo (público) o para guardar el trabajo para su posterior reutilización (secreto). Pueden contener archivos individuales, partes de archivos o aplicaciones completas. Puede descargar gists, clonarlos, bifurcarlos e incrustarlos.

Las esencias públicas se pueden descubrir y encontrar en búsquedas. Puede utilizar palabras clave para delimitar lo que encuentre, incluidos prefijos para restringir los resultados a lo esencial de usuarios específicos, lo esencial con al menos N estrellas, lo esencial con nombres de archivo específicos, etc.

Las esencias secretas no se pueden buscar, pero cualquiera que tenga la URL puede verlas. Si realmente desea que su código esté protegido, use un repositorio privado.

Como hemos visto, GitHub proporciona repositorios de Git como servicio, junto con funciones para revisión de código, gestión de proyectos, integraciones con otras herramientas de desarrollo, gestión de equipos, codificación social y documentación. Si bien GitHub no es el único producto en su categoría, es el repositorio dominante para el desarrollo de software de código abierto.