GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo controlar versiones con Git en la línea de comando

Git es uno de los software de control de versiones distribuidas más utilizado en Linux entre los desarrolladores para facilitar la coordinación en un mismo proyecto.

Si no está familiarizado con Git, se recomienda leer esta guía introductoria sobre la instalación y los primeros pasos con Git. Hasta ahora, solo se han mostrado las funciones básicas. Estos incluyen la preparación del espacio de trabajo y la creación de varios repositorios, a través de la "etapa" y "confirmación" de los cambios del archivo, así como cualquier posible eliminación o cambio de nombre del archivo.

El siguiente paso es para entender cómo moverse a través de las diferentes versiones del proyecto. Como sugiere la naturaleza del software, de hecho, la posibilidad de crear repositorios nuevos e infinitos, a partir de un trabajo preexistente, crea inevitablemente una cadena de caminos diferentes, todos derivados del mismo proyecto.

El objetivo de esta guía es explicar, por tanto, cómo gestionar correctamente el versionado de un proyecto, moviéndose entre las distintas ramas (branching), fusionando diferentes ramas y restaurando versiones anteriores. Esta guía es válida para las principales distribuciones de Linux y ha sido probada en Ubuntu 18.04.

Uso de ramas de Git

La ramificación es una de las características más poderosas de Git. Las ramas se utilizan para implementar funciones diferentes e independientes entre sí a partir de la misma raíz. La rama principal de un proyecto se genera cuando se crea un "repositorio" y se etiqueta como "maestro".

Lo primero que debe hacer para aprender a moverse por las diversas ramas de un repositorio es usar el comando "git checkout", seguido de la rama en la que trabajar:

    $ git checkout <branch>

Por ejemplo, para mover y trabajar en la rama principal, use el comando seguido de "maestro", como se muestra a continuación:

    $ git checkout master

Una vez indicada la rama para la creación de su repositorio, los archivos serán llevados a la última etapa de la rama elegida en la carpeta de trabajo. Luego, cualquier cambio futuro realizado creará una nueva versión del proyecto para esa rama en particular.

Crear una nueva Rama con Git

Para crear una nueva rama con Git, basta con utilizar el comando "git branch" seguido del nombre que se le dará a la rama creada:

    $ git branch <nome_ramo>

Pasar a la rama recién creada no es automático. Entonces, para trabajar en la sucursal recién creada, recurra al comando "git checkout":

    $ git checkout <nome_ramo>

En este punto, cada confirmación se referirá a la rama recién creada.

En la Figura 1 se realizan las siguientes operaciones:

  • Mover a la rama "maestra";
  • Creación de una nueva sucursal (Test0);
  • Mover a la rama recién creada;
  • Agregar un archivo (BranchTest);
  • Confirmación de cambios;
  • Vuelva a la rama "maestra".

Fig. 1 - Ejemplo de creación de rama y confirmación en Ubuntu 18.04

Buscar y eliminar Ramas de Git

El comando "git branch" sin seguir nada simplemente publicará una lista de todas las ramas existentes.

    $ git branch

Para eliminar una rama usa el comando "git branch", en este caso seguido del argumento "-d" y el nombre de la rama a eliminar:

    $ git branch -d <nome_ramo>

La Figura 2 muestra un ejemplo de una lista de sucursales y de la eliminación de la sucursal recién creada (Prueba0).

Fig. 2 - Ejemplo de Lista de Ramas y Eliminación en Ubuntu 18.04

Como se muestra en la figura, al intentar eliminar una rama en la que se realizaron cambios, Git devolverá un error. Como la rama no ha sido unida (branch merge), para no perder todo el trabajo realizado por error, se evitará su eliminación.

Aún será posible eliminar la rama usando el argumento "-D":

    $ git branch -D <nome_ramo>

Fusionar ramas de Git

El propósito de las ramas es crear flujos de trabajo paralelos e independientes para experimentar con nuevas funciones sin afectar el proyecto principal (por ejemplo, versiones "release", "beta" o "fix").
Por esta razón, el las sucursales están diseñadas para tener una vida corta, que culmina en la fusión con otra sucursal.

Las ramas se pueden fusionar usando el comando "git merge" seguido del nombre de la rama que se fusionará.

    $ git merge <ramo_da_unire>

Obviamente, la fusión tiene que darse entre dos ramas. El comando "git merge" fusiona la rama indicada en la sintaxis con la que estás actualmente. Entonces, para realizar la "combinación", asegúrese, a través de "git checkout", de estar en la rama con la que desea fusionarse.
Por lo tanto, el comando "git merge" indicado no dejará rastro de la combinación en el historial del "repositorio".

Muy a menudo, puede ser necesario realizar un seguimiento de la fusión para que sea suficiente simplemente usar el argumento "--no-ff". De esta forma, Git hará automáticamente un nuevo compromiso para identificar la "fusión" en el futuro:

    $ git merge --no-ff <ramo_da_unire>

La fusión de dos sucursales no implica la eliminación de la sucursal que haya sido fusionada con la indicada. En cambio, seguirá existiendo. Para eliminarlo de forma permanente, proceda con la eliminación usando el comando "git branch -d".

En la Figura 3 se muestra un ejemplo de fusión entre ramas. En concreto, las operaciones realizadas son:

  • Mover a la rama "maestra";
  • Lista de sucursales;
  • Fusión de la rama "Br01";
  • Cancelación de la sucursal "Br01".

Fig. 3 - Ejemplo de ramas fusionadas en Ubuntu 18.04

Para obtener una lista que muestre solo las ramas que no se fusionaron con la actual, use el comando "git branch" seguido del argumento "--no-merged".

    $ git branch --no-merged

Resolución de Conflictos

Cuando se fusionan dos ramas, Git determina automáticamente cuál de las dos confirmaciones principales es la mejor y se fusiona con ella.
Es posible que Git no pueda decidir automáticamente qué versión de los archivos conservar durante esta operación y, por lo tanto, notificará a un conflicto.
Si ocurre esta situación, resuelva el conflicto manualmente y confirme los cambios realizados. Alternativamente, la fusión de las sucursales no tendrá lugar.

El siguiente ejemplo muestra mejor esta ocurrencia. Dado que considera dos ramas diferentes donde se guardan dos versiones diferentes del mismo archivo, una vez fusionado, Git mostrará la siguiente advertencia:

    CONFLICT (content): Merge conflict in <filename>
   
   Automatic merge failed; fix conflicts and then commit the result.

Para solucionar el problema, dirígete a la carpeta donde se encuentra el archivo conflictivo, modifícalo y haz un "add" posterior con "commit". En el caso de un archivo de texto, Git informará las secciones infractoras en el archivo insertando la sección presente solo en la primera rama y entre "=" entre "<<<<<<<" y "=======" ======"y">>>>>>> "el presente solo en el segundo.

Modificando manualmente el archivo y ejecutando el comando "git add" seguido del " git commit", las dos ramas finalmente se fusionarán, como se muestra en la figura 4.

En el ejemplo que se muestra en la figura 4, las ramas no unidas también se controlaron para asegurarse de que la "fusión" se realizó correctamente.

Fig. 4 - Ejemplo de resolución de conflictos y fusiones en Ubuntu 18.04

De hecho, después de la confirmación, la rama "Br03" ya no aparece en la lista de ramas desconectadas, lo que demuestra que la fusión con la rama "Br04" se ha realizado correctamente.

Administración de etiquetas Git

Las "etiquetas" no son más que etiquetas que se adjuntan a las distintas "confirmaciones" para proporcionar información útil sobre la versión y el proyecto en el que está trabajando.

Para ver las etiquetas en un "repositorio", use el comando "git tag":

    $ git tag

Hay dos tipos diferentes de etiquetas en Git:"anotadas" y "ligeras". Los primeros se utilizan para indicar la información completa de la versión, como "checksum", el nombre del desarrollador, la fecha/hora y cualquier comentario. Los segundos son punteros simples a una confirmación.

El comando "git tag" seguido del texto de identificación de la versión creará una etiqueta "ligera". La sintaxis se muestra a continuación:

    $ git tag <Nome_Versione>

En su lugar, usar el argumento "-a" conduce a la versión de una etiqueta "anotada":

    $ git tag -a <Nome_Versione> -m <Commento>

Finalmente, para ver una etiqueta, use el comando "git show" como se muestra a continuación:

    $ git show <Nome_Versione>

Los comandos que acabamos de examinar le permiten agregar "etiquetas" solo a la última confirmación. Para agregar una etiqueta a una confirmación anterior, indique después del comando "git tag" también el identificador (Checksume) de la confirmación a la que se refiere. La sintaxis completa se muestra a continuación:

    $ git tag -a <Nome_Versione> <Checksum_Commit>

Para realizar un seguimiento de la "suma de comprobación" de las distintas confirmaciones realizadas, utilice el comando "git log".

    $ git log --pretty=oneline

Una vez que se inicia el comando, se mostrará en el terminal una lista en orden cronológico de las diversas "sumas de verificación" de las confirmaciones, seguida del comentario ingresado durante la fase de "confirmación" de los cambios.


Linux
  1. Ordenarse con ordenar en la línea de comando

  2. Multitarea en la línea de comandos con screenie

  3. Cómo comprobar la versión de Ubuntu desde la línea de comandos

  4. Encuentra la versión de WordPress desde la línea de comandos

  5. ¿Cómo obtener la versión del controlador nvidia desde la línea de comandos?

Cómo revisar la ortografía en la línea de comandos de Linux con Aspell

Cómo comprobar la versión de Ubuntu desde la línea de comandos

Manipulación de texto en la línea de comando con grep

Seguimiento del tiempo con Timewarrior en la línea de comandos

Cómo encontrar archivos con el comando fd en Linux

Cómo comprobar la versión del sistema operativo con la línea de comandos de Linux