Cómo utilizar el sistema de control de versiones de Git en Linux [Guía completa]


El control de versiones (control de revisión o control de fuente) es una forma de registrar cambios en un archivo o colección de archivos a lo largo del tiempo para que pueda recuperar versiones específicas más adelante. Un sistema de control de versiones (o VCS para abreviar) es una herramienta que registra cambios en archivos en un sistema de archivos.

Existen muchos sistemas de control de versiones, pero Git es actualmente el más popular y de uso frecuente, especialmente para la gestión de código fuente. El control de versiones se puede usar para casi cualquier tipo de archivo en una computadora, no solo para el código fuente.

Los sistemas/herramientas de control de versiones ofrecen varias características que permiten a las personas o un grupo de personas:

  • crear versiones de un proyecto.
  • realice un seguimiento de los cambios con precisión y resuelva los conflictos.
  • fusionar los cambios en una versión común.
  • revertir y deshacer cambios en archivos seleccionados o en un proyecto completo.
  • acceder a versiones históricas de un proyecto para comparar cambios a lo largo del tiempo.
  • ver quién modificó por última vez algo que podría estar causando un problema.
  • crear una copia de seguridad segura fuera del sitio de un proyecto.
  • use varias máquinas para trabajar en un solo proyecto y mucho más.

Un proyecto bajo un sistema de control de versiones como Git tendrá principalmente tres secciones, a saber:

  • un repositorio: una base de datos para registrar el estado o los cambios en los archivos de su proyecto. Contiene todos los metadatos y objetos de Git necesarios para el nuevo proyecto. Tenga en cuenta que esto es normalmente lo que se copia cuando clona un repositorio de otra computadora en una red o servidor remoto.
  • un directorio o área de trabajo: almacena una copia de los archivos del proyecto en los que puede trabajar (hacer adiciones, eliminaciones y otras acciones de modificación).
  • un área de ensayo: un archivo (conocido como índice en Git) dentro del directorio de Git, que almacena información sobre los cambios, que está listo para confirmar (guardar el estado de un archivo o conjunto de archivos) en el repositorio.

Hay dos tipos principales de VCS, con la principal diferencia en el número de repositorios:

  • Sistemas de control de versiones centralizados (CVCS): aquí, cada miembro del equipo del proyecto obtiene su propio directorio de trabajo local, sin embargo, envían los cambios a un único repositorio central.
  • Sistemas de control de versiones distribuidos (DVCS): bajo esto, cada miembro del equipo del proyecto obtiene su propio directorio de trabajo local y directorio Git donde pueden realizar confirmaciones. Después de que una persona realiza una confirmación localmente, otros miembros del equipo no pueden acceder a los cambios hasta que los envíe al repositorio central. Git es un ejemplo de DVCS.

Además, un repositorio de Git puede ser simple (repositorio que no tiene un directorio de trabajo) o no simple (uno con un directorio de trabajo). Los repositorios compartidos (o públicos o centrales) siempre deben estar desnudos; todos los repositorios de Github están desnudos.

Aprenda el control de versiones con Git

Git es un sistema de control de versiones gratuito y de código abierto, rápido, potente, distribuido, fácil de usar y popular que es muy eficiente con grandes proyectos y tiene un notable sistema de ramificación y fusión. Está diseñado para manejar datos más como una serie de instantáneas de un mini sistema de archivos, que se almacena en un directorio Git.

El flujo de trabajo en Git es muy simple: realiza modificaciones a los archivos en su directorio de trabajo, luego agrega selectivamente solo aquellos archivos que han cambiado, al área de preparación, para que formen parte de su próxima confirmación.

Una vez que esté listo, realiza una confirmación, que toma los archivos del área de ensayo y guarda esa instantánea de forma permanente en el directorio de Git.

Para instalar Git en Linux, use el comando apropiado para su distribución de elección:

$ sudo apt install git   [On Debian/Ubuntu]
$ sudo yum install git   [On CentOS/RHEL]

Después de instalar Git, se recomienda que le diga a Git quién es usted proporcionando su nombre completo y dirección de correo electrónico, de la siguiente manera:

$ git config --global user.name “Aaron Kili”
$ git config --global user.email “[email protected]

Para verificar su configuración de Git, use el siguiente comando.

$ git config --list 

Crea un nuevo repositorio de Git

Los repositorios compartidos o los flujos de trabajo centralizados son muy comunes y eso es lo que demostraremos aquí. Por ejemplo, asumimos que se le ha asignado la tarea de configurar un repositorio central remoto para administradores de sistemas/programadores de varios departamentos de su organización, para trabajar en un proyecto llamado bashscripts, que se almacenará en/projects/scritpts/en el servidor.

SSH en el servidor remoto y cree el directorio necesario, cree un grupo llamado sysadmins (agregue todos los miembros del equipo del proyecto a este grupo, por ejemplo, administrador de usuario) y establezca los permisos apropiados en este directorio.

# mkdir-p /projects/scripts/
# groupadd sysadmins
# usermod -aG sysadmins admin
# chown :sysadmins -R /projects/scripts/
# chmod 770 -R /projects/scripts/

Luego, inicialice un repositorio de proyecto simple.

# git init --bare /projects/scripts/bashscripts

En este punto, ha inicializado con éxito un directorio Git básico que es la instalación de almacenamiento central para el proyecto. Intente hacer una lista del directorio para ver todos los archivos y directorios allí:

# ls -la /projects/scripts/bashscripts/

Clonar un repositorio de Git

Ahora clone el repositorio compartido remoto de Git en su computadora local a través de SSH (también puede clonar a través de HTTP/HTTPS si tiene un servidor web instalado y configurado adecuadamente, como es el caso de la mayoría de los repositorios públicos en Github), por ejemplo:

$ git clone ssh://[email protected]_server_ip:/projects/scripts/bashscripts 

Para clonarlo en un directorio específico (~/bin/bashscripts), use el siguiente comando.

$ git clone ssh://[email protected]_server_ip:/projects/scripts/bashscripts ~/bin/bashscripts

Ahora tiene una instancia local del proyecto en un repositorio no simple (con un directorio de trabajo), puede crear la estructura inicial del proyecto (es decir, agregar un archivo README.md, subdirectorios para diferentes categorías de scripts, por ejemplo, recon para almacenar scripts de reconocimiento, sysadmin ro almacenar sysadmin sysadmin, etc.):

$ cd ~/bin/bashscripts/
$ ls -la

Verificar un resumen de estado de Git

Para mostrar el estado de su directorio de trabajo, use el comando de estado que le mostrará cualquier cambio que haya realizado; qué archivos no están siendo rastreados por Git; los cambios que se han realizado y así sucesivamente.

$ git status 

Cambios de etapa de Git y compromiso

A continuación, organice todos los cambios usando el comando add con el interruptor -A y realice la confirmación inicial. El indicador -a indica al comando que organice automáticamente los archivos que se han modificado, y -m se utiliza para especificar un mensaje de confirmación:

$ git add -A
$ git commit -a -m "Initial Commit"

Publicar confirmaciones locales en un repositorio de Git remoto

Como líder del equipo del proyecto, ahora que ha creado la estructura del proyecto, puede publicar los cambios en el repositorio central usando el comando push como se muestra.

$ git push origin master

En este momento, su repositorio local de git debe estar actualizado con el repositorio central del proyecto (origen), puede confirmar esto ejecutando el comando de estado una vez más.

$ git status

También puede informar a sus colegas para que comiencen a trabajar en el proyecto clonando el repositorio en sus computadoras locales.

Crear una nueva rama de Git

La ramificación le permite trabajar en una función de su proyecto o solucionar problemas rápidamente sin tocar la base de código (rama maestra). Para crear una nueva rama y luego cambiar a ella, use los comandos branch y checkout respectivamente.

$ git branch latest
$ git checkout latest

Alternativamente, puede crear una nueva rama y cambiar a ella en un solo paso usando el comando de pago con el indicador -b .

$ git checkout -b latest

También puede crear una nueva rama basada en otra rama, por ejemplo.

$ git checkout -b latest master

Para verificar en qué rama se encuentra, use el comando de rama (un carácter de asterisco indica la rama activa):

$ git branch

Después de crear y cambiar a la nueva rama, realice algunos cambios en ella y realice algunas confirmaciones.

$ vim sysadmin/topprocs.sh
$ git status
$ git commit add  sysadmin/topprocs.sh
$ git commit -a -m 'modified topprocs.sh'

Fusionar cambios de una rama a otra

Para fusionar los cambios de la prueba de rama en la rama principal, cambie a la rama principal y realice la fusión.

$ git checkout master 
$ git merge test 

Si ya no necesita una rama en particular, puede eliminarla usando el interruptor -d .

$ git branch -d test

Descargar cambios desde el repositorio central remoto

Suponiendo que los miembros de su equipo hayan enviado cambios al repositorio central del proyecto, puede descargar cualquier cambio en su instancia local del proyecto usando el comando de extracción.

$ git pull origin
OR
$ git pull origin master	#if you have switched to another branch

Inspeccionar el repositorio de Git y realizar comparaciones

En esta última sección, cubriremos algunas funciones útiles de Git que realizan un seguimiento de todas las actividades que ocurrieron en su repositorio, lo que le permite ver el historial del proyecto.

La primera característica es el registro de Git, que muestra los registros de confirmación:

$ git log

Otra característica importante es el comando show que muestra varios tipos de objetos (como confirmaciones, etiquetas, árboles, etc.):

$ git show

La tercera característica vital que necesita saber es el comando diff, que se utiliza para comparar o mostrar diferencias entre ramas, mostrar cambios entre el directorio de trabajo y el índice, cambios entre dos archivos en el disco y mucho más.

Por ejemplo, para mostrar la diferencia entre la rama maestra y la última rama, puede ejecutar el siguiente comando.

$ git diff master latest

Git permite que un equipo de personas trabaje en conjunto utilizando los mismos archivos, mientras registra cambios en los archivos a lo largo del tiempo para que puedan recuperar versiones específicas más adelante.

De esta manera, puede usar Git para administrar el código fuente, los archivos de configuración o cualquier archivo almacenado en una computadora. Es posible que desee consultar la documentación en línea de Git para obtener más documentación.