Control de versiones en Linux con Git: Commits, ramas y repositorios
El control de versiones en Linux con el git del código fuente durante el desarrollo de un software es importante, incluso para quien desarrolla software sin colaboración de más personas.
En el mundo open-source, cuya premisa es distribuir el código fuente libremente, para que pueda ser mejorado a través de la contribución de diversos desarrolladores por el mundo, el control de versiones es absolutamente necesario.
Existen diversos softwares de control de versiones gratuitos y de código abierto disponibles, como CVS, SVN y GIT.
Este último, creado por Linus Torvalds, se volvió popular, ya que utiliza repositorios de software gratuitos para hacer la distribución y control del código fuente.
Surgieron varios repositorios, como GitHub (adquirido por Microsoft), GitLab, BitBucket, entre otros.
El paquete git puede ser instalado en Linux utilizando el administrador de paquetes apt, yum o dnf.
Términos importantes para entender Git:
- Repositorio remoto: es el repositorio alojado en algún servidor, que hará el control de usuarios y control de versiones;
- Workspace: es el directorio local, que permite al desarrollador trabajar en su copia local del código fuente. Normalmente es un directorio común en la máquina;
- Index: es un directorio oculto que se encuentra en el directorio de trabajo (workspace), con el nombre ".git". El git mantiene un índice de los archivos del workspace, con checksum, timestamps, etc. Además del índice, el git mantiene una copia comprimida de todas las versiones de todos los archivos en forma de objeto.
- Repositorio Local: mantenido dentro del directorio .git. Contiene el historial de cada archivo del proyecto, en forma de un snapshot (una imagen), a cada acción de "commit".
Crear un Nuevo Proyecto con Git
Para crear un nuevo proyecto y versionarlo con Git, es necesario seguir los siguientes pasos:
Primero se crea un directorio usando el comando mkdir:
$ mkdir projeto$ cd projeto
Después se puede inicializar el directorio para usar Git, con el comando init:
$ git initInitialized empty Git repository in /home/uira/projeto/.git/
La inicialización crea el directorio oculto .git:
$ ls -1 .git/branchesconfigdescriptionHEADhooksinfoobjectsrefs
Configurar un proyecto con git
Después, se debe cambiar el usuario y email usado en Git, para posibilitar el rastreo de los cambios, con el comando config:
$ git config --global user.name "Uira Ribeiro" $ git config --global user.email "[email protected]"
Si se usa la opción "--global", el git guardará la identificación en un archivo llamado .gitconfig en el directorio home del usuario:
$ cat ~/.gitconfig [user] name = Uira Ribeiro email = [email protected]
Ahora se puede usar el directorio del Workspace creado para escribir los programas.
Para agregar un nuevo proyecto a un repositorio remoto, primero se debe crear el repositorio remoto, a través del sitio de GitHub.
Después, se puede usar el comando remote:
$ git remote add origin https://github.com/uira/projetoteste
Clonar un Proyecto de Github
Si no se va a iniciar un nuevo proyecto, se puede clonar un proyecto existente en GitHub.
Para clonar un proyecto de un repositorio en GitHub (u otro repositorio), es necesario copiar la URL del proyecto.
Github |
El comando clone puede ser usado para clonar un proyecto de un repositorio remoto:
$ git clone https://github.com/uiraribeiro/aulalpi.git aulasCloning into 'aulas'...remote: Enumerating objects: 23, done.remote: Total 23 (delta 0), reused 0 (delta 0), pack-reused 23Unpacking objects: 100% (23/23), done.
De esta manera, todos los archivos de la última versión serán copiados al directorio de trabajo recién creado llamado "aulas".
Agregar archivos al Índex del git
Cada vez que se agregue un archivo al proyecto, o se modifique algún archivo, es necesario enviarlo al índice.
Para agregar archivos al índice, se debe usar el comando "add". Este necesita un parámetro, que puede ser el nombre del archivo, o un punto "." o asterisco "*" para designar todo el árbol de directorios del Workspace.
$ git add *
El comando "add" no produce ninguna salida.
Si no se desea que el comando "add" agregue un determinado directorio al índice, se debe crear un archivo llamado .gitignore en la raíz de este directorio.
Agregar Archivos al Repositorio Local del git
Después de agregar los archivos al índice, se puede crear un snapshot (una imagen) de los archivos agregados o modificados en el repositorio Git local con el comando "commit":
$ git commit -m "alteracoes" [master a5a18f7] alteracoes 1 file changed, 2 insertions(+)
La opción "-m" del commit escribe un comentario en el repositorio, con observaciones sobre los cambios realizados. Si no se utiliza la opción "-m", el git abrirá el editor de textos predeterminado, con la lista de archivos modificados y agregados, para que el usuario describa los cambios realizados.
Visualizando el Log de Cambios del git
El comando log puede ser usado para visualizar los cambios en el repositorio.
$ git logcommit a5a18f7cff53e0c3b4ea6ecfd4d53f704652ba79 (HEAD -> master)Author: Uira Ribeiro <[email protected]>Date: Sun Jan 12 16:58:14 2020 -0300 alteracoescommit 2323684b1a8e861250a4250dec8c400e0ce7ca6d (origin/master, origin/HEAD)Author: Prof. Uirá Ribeiro <[email protected]>Date: Fri Apr 27 18:25:30 2018 -0300 first commit
Enviando del Repositorio Local al Repositorio Remoto del git
Una vez que los archivos del proyecto están listos, se pueden compartir los cambios del último commit con el repositorio remoto, a través del comando push.
El comando push requiere que se tenga un usuario y contraseña en el repositorio remoto:
$ git pushUsername for 'https://github.com': uiraPassword for 'https://[email protected]': Enumerating objects: 5, done.Counting objects: 100% (5/5), done.Delta compression using up to 2 threadsCompressing objects: 100% (3/3), done.Writing objects: 100% (3/3), 290 bytes | 290.00 KiB/s, done.Total 3 (delta 2), reused 0 (delta 0)remote: Resolving deltas: 100% (2/2), completed with 2 local objects.To https://github.com/uiraribeiro/aulalpi.git 2323684..a5a18f7 master -> master
De esta manera, este enumera los archivos que fueron modificados, agregados y eliminados, comprime, y envía al repositorio remoto.
Actualizando el Repositorio Local del git
Para actualizar el repositorio y el Workspace local con los últimos cambios del repositorio remoto, se puede usar el comando pull:
$ git pullAlready up to date.
Si no hay cambios, el git no hará nada.
La figura 57 ilustra el proceso de versionamiento básico de Git:
Figura 57 - Git |
Creando un Branch con git
Una rama es una ramificación en el control de versiones y en la gestión del desarrollo del software.
Básicamente permite la duplicación de un objeto bajo control de versiones (un archivo de código fuente o un conjunto de directorios), para que las modificaciones puedan ocurrir en paralelo a lo largo de varias ramificaciones.
Básicamente es una metodología que permite que varios desarrolladores colaboren en el mismo proyecto, con la capacidad de separar lo que cada uno hizo (cada uno con su branch), y luego juntar en algo que funcione, mezclando los diferentes branches.
De esta forma, el objetivo de crear un branch es organizar la capacidad de mezclar los diferentes branches a través de un merge al proyecto padre.
El branch también permite que nuevos softwares surjan de proyectos existentes. Cuando esto ocurre se llama fork. Por ejemplo, MariaDB es un fork de MySQL.
Git automáticamente crea un branch principal, o padre, llamado "master".
Para crear una ramificación de archivos del proyecto, se puede usar el comando "branch" para crear una ramificación:
$ git branch livro
En este ejemplo, se creó un branch del proyecto aula, llamado "livro". Git no usa el nuevo branch hasta que se haga un checkout:
$ git checkout livroSwitched to branch 'livro'
A partir de este momento, todos los archivos agregados con el comando "add" y enviados al repositorio local con commit, serán guardados en el branch livro.
Mezclando un Branch con git
Una vez que se desea mezclar los archivos de un branch al proyecto original (branch master), se puede usar el comando merge.
Para hacer esto, primero se debe hacer el checkout en el branch master:
$ git checkout masterSwitched to branch 'master'Your branch is up to date with 'origin/master'.
Se puede confirmar cuál es el branch de trabajo con el comando branch:
$ git branch livro* master
El asterisco (*) indica cuál es el branch en el que se está trabajando.
Para mezclar el branch livro con el branch master, se usa el comando merge:
$ git merge livroUpdating a5a18f7..5b7568dFast-forward arquivo | 1 + 1 file changed, 1 insertion(+) create mode 100644 arquivo
Conclusión
Git es un poderoso administrador de paquetes, utilizado incluso en el versionamiento del kernel de Linux. Sin duda, el más utilizado para control de versiones en el mundo de la programación. Si escribes algún software, sin duda necesitas usar Git.
Aprende mucho más sobre Linux en nuestro curso en línea. Puedes realizar la inscripción aquí. Si ya tienes una cuenta, o quieres crear una, simplemente ingresa o crea tu usuario aquí.
¿Te gustó? Comparte
Eso fue solo una pieza. El curso enseña el camino completo — desde tu primer comando hasta el día del examen.
Github
Figura 57 - Git