Git

> Temas > Git
Editar

Git es un sistema de control de versiones, un software que sirve básicamente para gestionar las versiones por las que va pasando el código de los proyectos.

Git es el más popular de los sistemas de control de versiones en la actualidad y una de las herramientas más indispensables para el desarrollo de proyectos de software.

Aunque un sistema de control de versiones sirva justamente para controlar los estados por los que ha pasado un código, lo cierto es que la herramienta git facilita mucho el desarrollo de los proyectos en equipo, así como otras operaciones relacionadas con el flujo de trabajo de los desarrolladores.

Por ejemplo, gracias a Git los desarrolladores pueden participar en un proyecto y hacer aportaciones de código sin que uno desarrollador pueda llegar a machacar cambios que hayan introducido otros desarrolladores. Esta sería una de las principales ventajas de Git, pero además gracias a esta herramienta podemos facilitar los despliegues, las revisiones de código y establecer tareas automatizadas cuando el código de los proyectos cambia.

Más información:

Git

Manuales

Manual de Git
Esta es una compilación de artículos y vídeos destintados a aprender Git, el sistema de control de versiones más utilizado...

Por qué usar Git

Git es la primera pieza de cualquier set de herramientas para el desarrollo moderno. Forma parte del día a día de los desarrolladores profesionales, de los equipos de desarrollo y de los profesionales devOps.

Controlar las versiones del código

Obviamente nos sirve para el control de versiones de los proyectos y por ello permite saber todos los estados por los que han pasado cada uno de los archivos de código de un proyecto. Permite saber cuándo se modificó un archivo y qué cambios se realizaron, a lo largo de toda la existencia de ese archivo.

Trabajo en equipo

Git es la herramienta fundamental para trabajo en equipo, ya que permite que cada desarrollador trabaje con su propia copia local del proyecto y, cuando envíe cambios al repositorio global, se asegure que su código no machaca modificaciones introducidas por otros desarrolladores.

Ademas gracias a Git cualquier desarrollador puede sincronizar el código del proyecto local con los cambios introducidos por otros desarrolladores, lo que facilita mucho el día a día del trabajo de todos los desarrolladores y la gestión de proyectos.

Revisar el código del proyecto en equipo

Otra de las ventajas de Git para equipos de trabajo es que podemos revisar cualquier actualización del código del proyecto entre varias personas. Un desarrollador envía un pull request y otro u otros desarrolladores pueden verificar que los cambios tienen buena pinta, antes de incorporarlos al proyecto.

Revisar la calidad del código y pasar las pruebas

Con Git podemos automatizar diversos procesos de comprobación de la calidad del código, como los que nos permiten los linters o las pruebas. Estas comprobaciones se pueden realizar con cualquier intento de enviar código al repositorio. Si no pasa la revisión del Linter o las pruebas, simplemente no se permitirá actualizar el código del proyecto.

Estos sistemas facilitan aportar un estándar de codificación que tendrán que seguir todos los profesionales del proyecto. Si se intenta enviar cambios al proyecto y el formato o las buenas prácticas no se están siguiendo correctamente, Git no permitirá la actualización del código. Por supuesto, si todas las pruebas unitarias no pasan correctamente, tampoco se podrá actualizar el proyecto.

Despliegue de aplicaciones web

Con Git puedes subir un sitio web al servidor en cuestión de instantes, sin usar el engorroso FTP. Además, cuando se actualiza el código del proyecto puedes usar Git para subir únicamente aquellos archivos que se han modificado, con un sencillo comando de consola.

Aunque no usemos todo el potencial de las operaciones con Git, solo si conseguimos sustituir FTP, estaremos ganando mucha facilidad de organización de proyectos medianos y grandes.

Integración continua y despliegue continuo

Git además de todo permite organizar flujos de trabajo para la automatización de tareas repetitivas, como desplegar el proyecto en entornos de pruebas, desplegar en preproducción o producción.

Estos flujos de trabajo pueden ser tan complejos como se requiera según el proyecto. Todo empezará eventos realizados por el propio Git, cuando se envía por ejemplo código nuevo a una rama determinada. Entonces se podrán realizar todo tipo de acciones, como correr las pruebas, levantar servidores para pruebas de integración, enviar los cambios a servidores, ya sea para producción o preproducción, etc.

Como se puede ver, Git sirve mucho más que solamente controlar las versiones de un software y resulta una herramienta fundamental para todos los procesos de automatización que se pueden realizar en todo tipo de proyectos de software.

Editar

Instalar Git

La instalación de Git es muy sencilla, de hecho en la mayoría de las ocasiones se trata simplemente de instalarlo con el típico programa de instalación de software.

Importante mencionar que el instalador de Git se debe descargar de la página oficial de Git.

A partir de ahí, el proceso proceso depende del sistema operativo con el que estemos trabajando. Para los sistemas más importantes es el siguiente.

Instalar Git en Linux

En el caso de Linux, la mayoría de distribuciones ya tienen Git instalado de manera predeterminada. No tenemos que hacer nada en concreto.

En Linux o cualquier otro sistema donde quieras saber si Git ya está instalado es lanzar este comando:

git --version

Si está instalado tendrás un mensaje con la versión disponible en tu sistema.

Instalar Git en Windows

En Windows Git se instala por medio de un instalador. No hay más que seguir el asistente y tendremos ya disponible el comando "git" en nuestro terminal.

Los usuarios de Windows durante la instalación de Git tienen la opción de instalar Git Bash, que es un programa de terminal de línea de comandos muy recomendable. Git Bash es un terminal basado en Bash que por tanto tiene un juego de comandos como el de Linux. Es interesante instalarlo si te dedicas al desarrollo, ya que es mucho más adecuado que el terminal que viene instalado por defecto en Windows. No obstante, existen muchas alternativas de terminales también útiles para desarrollo.

Instalación de Git en Mac

El instalador para Mac también se realiza mediante la descarga proporcionada en el sitio oficial. Aunque algunas versiones recientes de MacOS ya tienen Git disponible de casa.

Además, para la instalación en Mac existen otras alternativas que merece la pena comentar.

1.- Con xcode command line tools Esto no es el xcode completo, solo algunos comandos que son útiles para desarrolladores. Desde un terminal escribes.

xcode-select --install

2.- Instalar Git con Homebrew Esto es un instalador de paquetes para MacOS muy útil, más tarde o temprano lo necesitarás para instalar muchas cosas. Una vez instalado Homebrew lanzas el comando

brew install git

Editar

Configuración inicial de Git

En el momento que acabamos de instalar Git es necesario realizar una primera configuración en la que informaremos a Git sobre quién somos y cuál es nuestro email, que usará para firmar las confirmaciones de código que realicemos.

Para hacer esta configuración inicial debemos lanzar los comandos siguientes:

git config --global user.name "Tu nombre"
git config --global user.email "tu_email@example.com"

Editar

Repositorios Git

En Git un repositorio es un proyecto de software controlado por este sistema de control de versiones. Físicamente no es más que una carpeta del sistema de archivos con código fuente de una aplicación. Esa carpeta se mantiene bajo el seguimiento de Git, de modo que, si se realizan cambios en sus archivos, se mantienen controlados por el sistema.

Todo repositorio tiene dentro una carpeta oculta llamada .git que es donde Git mantiene sus archivos para realizar su propia tarea de control del software. Si por cualquier motivo se borra esa carpeta, dejaría de ser un repositorio y se perdería todo el control que Git mantiene sobre ella. Además, al borrar la carpeta .git también se pederían todo el control de cambios realizado por Git hasta la fecha sobre ese repositorio.

Repositorios distribuidos

Git tiene la característica de ser un sistema de control de versiones con repositorios distribuidos. Esto quiere decir que cada uno de los integrantes de un proyecto tiene una copia exacta del repositorio y no solamente una copia de los archivos con los que haya trabajado. En otras palabras, cuando varios desarrolladores trabajan en un proyecto gestionado por Git, cada uno de ellos tiene en su ordenador un clon de todo el proyecto. Una copia de cada uno de los archivos que forman parte del proyecto.

Cada copia del repositorio o clon contendrá todos los archivos también y realizaría seguimiento igualmente, independientemente de si esa copia está en el mismo ordenador, en un servidor remoto, tipo GitHub, o en el ordenador de otro desarrollador.

Esta situación es muy útil, porque cada desarrollador puede trabajar de manera autónoma, al contar con una copia completa de todo el software que se está desarrollando, sin depender de estar situado en la oficina o de una conexión a Internet. Otros tipos de sistemas de control de versiones que son centralizados no permiten esa posibilidad de trabajo autónomo, ya que el desarrollador requiere estar conectado al repositorio central para poder obtener archivos del proyecto.

Repositorios remotos

Habitualmente se utilizan repositorios remotos, alojados en un servidor de Internet, para que todos los desarrolladores envíen cambios y sincronicen su repositorio local con el repositorio remoto. De este modo se facilita que todas las personas que trabajan en el proyecto puedan colaborar. Proporcionar un repositorio remoto es una de las funciones de GitHub y otros servicios de hosting de repositorios Git como Gitlab o Bitbucket.

Lo dicho anteriormente del posible borrado de la carpeta .git, perdiendo toda la gestión del repositorio local y el control de cambios realizado, o incluso el borrado completo de un proyecto en un ordenador de desarrollo, no sería tanto problema si ese repositorio está subido a GitHub. El hosting de repositorios remotos nos asegura que los cambios se mantendrían salvaguardados. En cualquier momento podríamos volver a descargar el repositorio, mediante la operación de clonando.

Crear un repositorio Git

Para crear un repositorio Git desde cero, debemos partir de una carpeta vacía. Estando situados en ella con el terminal de línea de comandos, se tiene que lanzar el comando:

git init

Eso hará que se cree dentro la subcarpeta .git y que la carpeta donde nos encontramos se convierta por tanto en un repositorio Git, pasando a estar controlada por el sistema de control de versiones.

Creación de un repositorio por medio del clonado

También podemos crear un repositorio en local a partir de un repositorio que tengamos en otro servidor, por ejemplo uno subido a GitHub, por medio del clonado. Puedes obtener más información en esta misma página y en el artículo del clonado de repositorios Git.

Editar

Clonado de un repositorio Git

Cuando iniciamos un proyecto nosotros mismos tenemos que comenzar por inicializar el repositorio con "Git init", sin embargo, cuando queremos trabajar sobre un proyecto que ya ha sido iniciado por otras personas, o por nosotros mismos pero lo queremos obtener desde otro ordenador o servidor, la operación que tendremos que realizar es el clonado.

Por medio del clonado se accede a un repositorio remoto y se obtiene una copia del mismo, que se instala en una carpeta de nuestro ordenador. Una vez clonado podemos comenzar a trabajar con el repositorio realizando modificaciones en su código y confirmaciones (commits) en local.

El comando para hacer el clonado es "clone", seguido de la URL del repositorio que se desea clonar:

git clone https://github.com/usuario/nombre_repo.git

La URL específica del repositorio la encontrarás en la página del hosting remoto que estés usando, como GitHub o similares.

Una vez hecho el clon se habrá creado en tu ordenador, en la carpeta donde estabas situado con el terminal, un subdirectorio con el mismo nombre que el repositorio. Dentro de ese subdirectorio está el propio clon que acabamos de realizar, con todos los archivos del proyecto.

También puedes clonar un repositorio en otra carpeta que no tiene por qué tener necesariamente el mismo nombre del repositorio. Para ello necesitas situarte en una carpeta completamente vacía, sin ningún archivo, que habrás creado con el nombre que quieras. Luego lanzas el comando de clonado, pero agregando un punto al final.

git clone https://github.com/usuario/nombre_repo.git .

Con eso le estás diciendo a Git que el clonado debe realizarse en la carpeta actual (el punto del final significa el directorio actual como carpeta de destino del clon). Pero es importante que la carpeta actual esté completamente vacía, ya que en caso contrario daría un error.

Autenticación para clonar repositorios privados

Ten en cuenta que para clonar repositorios y para otras operativas con GitHub es posible que tengas que autenticarte. Ahora la autenticación en GitHub se realiza mediante un Personal Access Token.

Puedes encontrar más detalles sobre esta operativa en el artículo Clonar un repositorio.

Editar

Confirmación de cambios en Git

Una de las tareas más importantes que se hacen en Git es la confirmación de cambios en repositorios, lo que se llama comúnmente un "commit". Mediante esta operación se envían los cambios al control de versiones, creando un nuevo estado del proyecto, que será almacenado mediante Git.

El proceso de una confirmación es el siguiente:

  • El desarrollador hace cambios en el código del proyecto
  • Los cambios se envían al staging area de Git, con el comando "add"
  • Los cambios se confirman con el comando "commit" y pasan a formar parte del histórico de confirmaciones del repositorio

Una vez se han confirmado cambios en Git podremos acceder al estado del proyecto, tal como estaba en esa confirmación. Además, en todo momento podremos ver qué cambios se hicieron en el código del proyecto entre esa confirmación y la anterior.

Cómo hacer un commit

Para poder hacer un commit sobre un repositorio primero debemos haber iniciado el respositorio con git init o bien haber clonado un repositorio remoto con git clone.

Luego podremos añadir archivos del proyecto al staging area con el comando:

git add .

El punto en al hacer "add" indica que querremos añadir todos los archivos que han sido incorporados al proyecto o todos los archivos que han cambiado. También podríamos indicar qué archivo o archivos deseamos añadir, colocando su nombre.

Una vez han sido añadidos hacemos el commit, con un comando que generalmente tiene esta forma:

git commit -m 'Mensaje de la confirmación'

Puedes encontrar más información sobre este procedimiento en el artículo Iniciar repositorio Git y primer commit

Editar

Operativa con repositorios remotos de Git

En el flujo de desarrollo con Git generalmente se usan repositorios remotos. Esos repositorios remotos también mantienen una copia completa de todo el proyecto y residen en un servidor externo a cualquier máquina de cualquier desarrollador. El servidor donde se aloja el repositorio remoto podría estar en la red local de la oficina del cliente, pero habitualmente se encuentra en una máquina externa, en un servidor de Internet.

La función principal del repositorio remoto es la de servir de apoyo a todos los desarrolladores, de manera que cada uno pueda sincronizar sus cambios realizados en el proyecto contra el servidor remoto y también sincronizar cambios para adquirir todas las nuevas versiones del código publicadas por otros desarrolladores del equipo.

La operativa básica de trabajo con el repositorio remoto consiste en estas operaciones esenciales de Git:

  • Cuando un desarrollador entra en el equipo crea su copia del repositorio en local, a partir del repositorio remoto. Esta operación se conoce como "clonado de repositorio" y es una operativa muy frecuente y básica, que se realiza con el comando "git clone".
  • Cuando un desarrollador hace cambios en un proyecto y decide compartirlos con el grupo, envía esos cambios al repositorio remoto, en una operación que se conoce como "push". Aunque cabe aclarar que es frecuente que el push se realice sobre una rama creada para desarrollar, en vez de la rama master (o aquella que sea la principal).
  • Cuando un integrante del equipo desea obtener los cambios realizados en el código del proyecto (realizados por otras personas), para integrarlos en su clon local, se los baja del repositorio remoto, en una operación que se conoce como "pull".

Editar

Autenticarse en GitHub con Personal Access Token

Es importante que conozcas cómo te debes autenticar actualmente, para usar cualquiera de los servicios de GitHub, cuando los usas desde el terminal de línea de comandos o programas de Git con interfaz gráfica.

En este artículo te explicamos cómo realizar la autorización en GitHub con Personal Access Token, ya que el mecanismo anterior basado en tu usuario y contraseña ha quedado obsoleto.

Editar

¿Quieres añadir algo sobre Git?

Crea artículos, recursos o comparte información sobre Git

Crear un bloque

Temas relacionados

Preguntas y respuestas de Git

Se han recibido 12 faqs en Git

Hacer una pregunta