Introducción
Git es un sistema de control de versiones que los desarrolladores utilizan en todo el mundo. Te ayuda a hacer un seguimiento de las diferentes versiones de tu código y a colaborar con otros desarrolladores. Los repositorios son servicios de terceros que permiten alojar en la nube un respaldo de tus proyectos y muestran visualmente como tu proyecto evoluciona haciendo uso de Git, entre los principales repositorios están: GitHub, Bitbucket y Gitlab.
¿Que es un sistema de control de versiones?
Un sistema de control de versiones (o VCS, por sus siglas en inglés), es una herramienta de software que monitoriza y gestiona cambios en un sistema de archivos. Asimismo ofrece herramientas de colaboración para compartir e integrar dichos cambios en otros usuarios del sistema. Al operar al nivel del sistema de archivos, un VCS monitorizará las acciones de adición, eliminación y modificación aplicadas a archivos y directorios.

¿Qué es Git?
Git es un sistema de control de versiones que se descarga e instala en el ordenador. Es esencial que uses Git si quieres colaborar con otros desarrolladores en un proyecto de codificación o trabajar en tu propio proyecto. Para comprobar si ya tienes Git instalado en tu ordenador puedes escribir el comando git –version en el terminal. Si ya tienes instalado Git, verás qué versión tienes. Si no tienes Git instalado puedes visitar el sitio web de Git y seguir fácilmente las instrucciones de descarga para instalar la versión correcta para tu sistema operativo.
Git maneja sus datos como un conjunto de copias instantáneas de un sistema de archivos miniatura. Cada vez que confirmas un cambio, o guardas el estado de tu proyecto en Git, él básicamente toma una foto del aspecto de todos tus archivos en ese momento y guarda una referencia a esa copia instantánea. Para ser eficiente, si los archivos no se han modificado Git no almacena el archivo de nuevo, sino un enlace al archivo anterior idéntico que ya tiene almacenado.
El flujo de trabajo (Workflow) básico en Git es algo así:
- Modificas una serie de archivos en tu directorio de trabajo.
- Preparar los archivos, añadiendo a tu área de preparación.
- Confirmar los cambios, lo que toma los archivos tal y como están en el área de preparación y almacena esa copia instantánea de manera permanente en tu directorio de Git.
¿Qué es Repositorio remoto?
Un servicio de alojamiento de repositorios es una herramienta de gestión organizativa que ofrece una visión transparente en el proceso de flujo de trabajo del desarrollo de software. Un buen servicio de alojamiento de repositorios ofrecerá herramientas para medir, monitorizar, debatir y gestionar la eficiencia y la precisión del desarrollo de software. En el mercado se encuentran diferentes servicios de repositorios cada uno con sus pros y contras sin embargo a la hora de seleccionar uno se debe tener en cuenta las características y magnitud del proyecto así como también del equipo de desarrollo a cargo del mismo.

Bitbucket Cloud
Es un servicio de la familia de Atlassian que permite entre otras cosas alojar de manera segura los proyectos de una organización o persona y facilita la revisión y manejo de versiones a través de su interfaz intuitiva. Este servicio está diseñado para almacenar proyectos grandes y pequeños con la mejor eficiencia posible.
Entre sus ventajas están:
- Integración con Jira o Trello: para mantener informadas a las personas interesadas. Accede a las ramas, el estado de compilación, los commits y el estado de los tiques de JIRA o las tarjetas Trello.
- Revisión del código: sus funciones de revisión ayudan a los desarrolladores a optimizar los tiempos de revisión y agilizar el proceso de desarrollo.
- Wiki: Además del alojamiento del código fuente, los servicios de repositorios alojan la documentación adjunta.
- Repositorios privados gratuitos: El desarrollo de software de código abierto aboga por código fuente gratuito y accesible.
- CI/CD integrado (continuous integration and continuous delivery explained): Es una función de Bitbucket que proporciona un sitio donde compilar, probar y realizar el despliegue con IC/CD integrados.
- Alojamiento propio: Bitbucket Server permite a tu equipo alojar los proyectos de código sensible de las organizaciones de forma segura y privada en una VPN u otra red interna protegida.
¿Guía práctica de Git?
Configuración inicial de usuario de manera global:
Cada usuario debe configurar en su entorno local sus datos de acceso para que el control de versiones pueda asociar a su cuenta los cambios que se realicen en el proyecto, esto es importante para las configuraciones iniciales de Git, los comandos para realizar la configuración de manera global son los siguientes:
git config --global user.name "Herald Flores"
git config --global user.email "herald.flores@boombit.agency"
Comprobando tu Configuración
Si quieres comprobar tu configuración, puedes usar el comando git config –list para mostrar todas las propiedades que Git ha configurado.
git config --list
Crear un repositorio local con Git
Estando dentro de la carpeta de nuestro proyecto, para empezar a usar Git tendremos que crear (o inicializar) un repositorio usando el comando git init. El comando git init genera las configuraciones necesarias para que el sistema de control de versiones empiece a gestionar los cambios en nuestro proyecto.
git init
Si deseamos ver el trabajo realizado en la inicialización del proyecto git podemos ejecutar desde la consola el siguiente comando ls -a esto muestra el directorio de nuestro proyecto incluyendo los archivos ocultos que git genera para llevar a cabo el seguimiento de las versiones de nuestro proyecto.
El repositorio es la carpeta .git dentro de la carpeta de nuestro proyecto. En ella se registran todos los cambios realizados en los archivos de nuestro proyecto y se registra ese historial a lo largo del tiempo. El repositorio que tenemos en nuestro ordenador se denomina repositorio local.
Agregar un repositorio remoto al proyecto (Bitbucket, Github, GitLab)
Para añadir un nuevo repositorio remoto, se usa el comando git remote add en la terminal, en el directorio en el que está almacenado tu repositorio. El comando recibe dos argumentos principales que son:
- Nombre del repositorio remoto: Ejemplo origin
- Url del repositorio remoto: https://bitbucket.org/boombit/example-repo/src/master/
git remote add origin https://bitbucket.org/boombit/example-repo/src/master/
Una vez agregado nuestro repositorio remoto podemos validar si se agregó correctamente a través del comando git remote -v que nos muestra una lista de orígenes remotos para nuestro proyecto. El resultado en consola es similar a lo siguiente:
> origin https://bitbucket.org/boombit/example-repo/src/master/ (fetch)
> origin https://bitbucket.org/boombit/example-repo/src/master/ (push)
Eliminar un repositorio remoto del proyecto (Bitbucket, Github, GitLab)
Para eliminar un repositorio remoto, se usa el comando git remote rm en la terminal, en el directorio en el que está almacenado tu repositorio. El comando recibe un único argumento que es el nombre del repositorio remoto por ejemplo: “origen” “destination” “staging”
git remote rm destination
Nota: git remote rm no elimina el repositorio remoto del servidor. Simplemente elimina el remoto y sus referencias de su repositorio local.
Cambiar la URL de un repositorio remoto (Bitbucket, Github, GitLab)
Para cambiar la url de un repositorio remoto en nuestro entorno local, se usa el comando git remote set-url en la terminal, este comando recibe dos argumentos como parámetros que son:
Un nombre remoto existente. Por ejemplo, origen o staging son dos opciones comunes.
Una nueva URL para la remota. Por ejemplo: https://bitbucket.org/boombit/boom-frontend-boiler/src/master/
git remote set-url origin https://bitbucket.org/boombit/boom-frontend-boiler/src/master/
¿Clonar un repositorio Remoto?
Es una utilidad de línea de comandos de Git que se utiliza para fijar como objetivo un repositorio existente con el fin de clonarlo o copiarlo. Si un proyecto ya se ha configurado en un repositorio central, el comando git clone es la manera más común de que los usuarios obtengan una copia de desarrollo. Al igual que git init, la clonación suele ser una operación única. Una vez que un desarrollador ha obtenido una copia de trabajo, todas las operaciones de control de versiones se gestionan por medio de su repositorio local.
git clone ssh://john@example.com/path/to/my-project.git
¿Qué es un commit de Git, Cómo agrego mis cambios al proyecto?
Sin duda uno de los comandos más utilizado en el día a día por los desarrolladores que hacen uso de git como su sistema de control de versiones es el commit, pero ¿Qué es? y ¿cómo se usa?. Un commit es una versión de tu proyecto. Representa una versión independiente del y tiene una referencia a todos los archivos y carpetas que forman parte de esa versión.
Para entender cómo hacemos un commit necesitamos aprender sobre tres espacios diferentes dentro de Git – el directorio de trabajo, el área de preparación y el historial de commit.
El directorio de trabajo está representado básicamente por el contenido de nuestra carpeta de proyecto. Es una especie de banco de trabajo, donde podemos añadir, editar y eliminar archivos en nuestro proyecto.
El área de preparación es una especie de espacio de borrador. Es donde podemos añadir versiones actualizadas de archivos o eliminar archivos para elegir lo que queremos incluir en nuestro próximo commit. En la carpeta .git el área de preparación está representada por un archivo llamado index.
El historial de commits es básicamente donde viven nuestros commits después de haber sido realizados. En la carpeta .git el historial de commit está representado por una carpeta llamada objects.

Guardando los cambios
Los comandos: git add, git status y git commit se utilizan en combinación para guardar una instantánea del estado actual de un proyecto Git.
git add
El comando git add añade un cambio en el directorio de trabajo al área de preparación. Le dice a Git que quieres incluir las actualizaciones de un archivo en particular en el próximo commit. Sin embargo, git add no afecta realmente al repositorio de forma significativa-los cambios no se registran realmente hasta que se ejecuta un commit. Ejemplos:
- Agregar un archivo específico: git add file.txt
- Agregar un archivo varios archivos: git add file-one.txt file-two.txt
- Agregar todos los archivos del proyecto: git add . ó git add –all
git status
El comando git status muestra el estado del directorio de trabajo y del área de preparación. Te permite ver qué cambios han sido puestos en escena, cuáles no, y qué archivos no están siendo seguidos por Git.
git commit
Finalmente llegamos al comando que nos permite guardar nuestros cambios y almacenar en git una nueva versión de nuestro proyecto, cabe destacar que un commit se compone de uno o varios cambios previamente preparados y agregados al área de preparación de GIt a través del comando git add y visualizando el estado a través del comando git status, cuando estamos seguros de que nuestros cambios están preparados procedemos a realizar nuestro commit de la siguiente manera:
git commit -m "commit message"
Si se pasa la opción -m, se prescinde del editor de texto en favor de un mensaje en línea.
¿Sincronización de Git?

Git fetch
El comando git fetch descarga commits, archivos y referencias de un repositorio remoto a tu repositorio local. Esta acción la llevas a cabo cuando quieres ver en qué han estado trabajando los demás. Este comando descarga el contenido remoto, pero no actualiza el estado de trabajo del repositorio local, por lo que tu trabajo actual no se verá afectado.
git fetch
git fetch origin
git fetch origin branch-name
git fetch --all
git fetch --dry-run
En el primer caso git comparará el repositorio remoto con el local sin afectar nuestros cambios locales, en el segundo caso estamos especificando el nombre del repositorio remoto esto es importante cuando en un mismo proyecto tenemos varios ambientes remotos, el comando fetch además de permitirnos especificar el origen también permite especificar la rama que deseamos comparar y traer los cambios a nuestro entorno local.
Git fetch –all es una función potente que recupera todos los repositorios remotos registrados y sus ramas, y por último git fetch –dry-run ejecutará una demo del comando. Genera ejemplos de acciones que realizará durante la recuperación, pero no los aplica.
Git push
El comando git push se usa para cargar contenido del repositorio local a un repositorio remoto. El envío es la forma de transferir commits desde tu repositorio local a un repositorio remoto. Es el equivalente de git fetch, pero en lugar de descargar importaciones de commits en ramas locales, envía exportaciones de commits a ramas remotas.
La variación más común del comando push es la siguiente: git push <remote> <branch> con este comando estamos enviando nuestros cambios locales al repositorio remoto y específicamente a una rama x, por ejemplo:
git push origin dev
git push origin master
git push staging dev
También es posible enviar todas las ramas locales a través del comando: git push <remote> –all
Y por último es posible hacer envíos forzados pero no es recomendable esta opción se usa en casos extremos y estando seguros de que nuestra versión no afectará el proyecto.
git push --force origin master
Git pull
El comando git pull se emplea para extraer y descargar contenido desde un repositorio remoto y actualizar al instante el repositorio local para reflejar ese contenido. La fusión de cambios remotos de nivel superior en tu repositorio local es una tarea habitual de los flujos de trabajo de colaboración basados en Git. El comando git pull es, en realidad, una combinación de dos comandos, git fetch seguido de git merge. En la primera etapa de la operación git pull ejecutará un git fetch en la rama local a la que apunta HEAD. Una vez descargado el contenido, git pull entrará en un flujo de trabajo de fusión. Se creará una nueva confirmación de fusión y se actualizará HEAD para que apunte a la nueva confirmación.
git pull <remote>
git pull --no-commit <remote>
git pull --rebase <remote>
git pull --rebase origin
Referencias:
https://www.atlassian.com/es/git/tutorials/setting-up-a-repository
https://git-scm.com/book/en/v2
https://docs.github.com/en/github/getting-started-with-github