Git
Chapters ▾ 2nd Edition

A1.1 Git en otros entornos - Interfaces gráficas

Si has leído hasta aquí todo el libro, seguro que has aprendido un montón de cosas sobre el uso de Git con la línea de comandos. Se puede trabajar con archivos locales, conectar nuestro repositorio con otros repositorios en la red y realizar nuestro trabajo eficientemente con ellos. Aunque las opciones no terminan ahí, Git se utiliza con parte de un ecosistema mayor y un terminal no siempre es la mejor forma de trabajar. Vamos a ver otros tipos de entornos en los que Git resulta muy útil y cómo otras aplicaciones (incluidas las tuyas) pueden trabajar conjuntamente con Git.

Interfaces gráficas

El entorno nativo de Git es la línea de comandos. Sólo desde la línea de comandos se encuentra disponible todo el poder de Git. El texto plano no siempre es la mejor opción para todas las tareas y en ocasiones se necesita una representación visual además, algunos usuarios se siente más cómodo con una interfaz de apuntar y pulsar.

Conviene advertir que los diferentes interfaces están adaptados para diferentes flujos de trabajo. Algunos clientes sólo disponen de un subconjunto adecuadamente seleccionado de toda la funcionalidad de Git para poder atender una forma concreta de trabajar que los autores consideran eficiente. Bajo esta perspectiva, ninguna de estas herramientas puede considerase “mejor” que otras, simplemente se ajusta mejor a un objetivo prefijado. Además, no hay nada en estos clientes gráficos que no se encuentre ya en el cliente en línea de comandos y, por tanto, la línea de comandos es el modo con el que se consigue la máxima potencia y control cuando se trabaja con repositorios.

gitk y git-gui

Cuando se instala Git, también se instalan sus herramientas gráficas: gitk y git-gui.

gitk es un visor gráfico del histórico. Hay que considerarlo como una interfaz gráfica mejorada sobre git log y git grep. Es la herramienta que hay que utilizar cuando se quiere encontrar algo que sucedió en el pasado o visualizar el histórico de un proyecto.

Gitk es muy fácil de invocar desde la línea de comandos. Simplemente, hay que moverse con cd hasta un repositorio de Git y teclear:

$ gitk [git log options]

Gitk admite muchas opciones desde la línea de comandos, la mayoría de las cuales se pasan desde la acción git log subyacente. Probablemente una de las más útiles sea la opción --all que indica a gitk que muestre todos los commit accesibles desde cualquier referencia, no sólo desde el HEAD. La interfaz de gitk tiene este aspecto:

El visor de históricos `gitk`.
Figure 153. El visor de históricos gitk.

En la parte superior hay algo que se parece un poco a la salida de git log --graph, donde cada punto representa un commit, las líneas representan relaciones entre padres e hijos y las referencias aparecen como cajas coloreadas. El punto amarillo representa una CABEZA o HEAD y el punto rojo a cambios que han sido aceptado con commit. En la parte inferior se encuentra un commit seleccionado con los comentarios y el parche a la izquierda, junto con una vista resumen a la derecha. En medio hay una serie de controles que se usan para buscar en el histórico.

Por su parte, git-gui es principalmente una herramienta para elaborar commits. Resulta igual de sencilla de invocar desde la línea de comandos:

$ git gui

La herramienta tiene este aspecto:

La herramienta `git-gui`.
Figure 154. La herramienta git-gui.

A la izquierda está el índice con los cambios no preparados al principio y los preparados al final. Es posible mover archivos completos entre los dos estados haciendo clic en sus respectivos iconos o seleccionar un archivo para visualizarlo haciendo clic en su nombre.

A la derecha, en la parte superior, se encuentra la vista de diferencias que muestra los cambios producidos en el archivo seleccionado. Se pueden preparar bloques o líneas individualmente haciendo clic con el botón derecho sobre esta zona.

En la parte inferior se encuentra el área de mensajes y acciones. Escribiendo un mensaje en la caja de texto y haciendo clic en el botón “Commit`` se hace algo lo mismo que con git commit. Es posible rectificar el último commit eligiendo ``Amend`` en el botón de opción, con lo que se actualizará la zona de cambios preparados o ``Staged Changes`` con el contenido del último commit. Así es posible poner un cambio como preprepado o no preparado, modificar el mensaje de un commit y, a continuación, hacer clic en ''Commit” para sustituir un commit anterior por uno nuevo.

gitk y git-gui son ejemplos de herramientas orientadas a tareas. Cada una de ellas está adaptada para un propósito específico (visualización del histórico y creación de commits, respectivamente), omitiendo aquellas características que no son necesarias para su tarea.

GitHub para Mac y Windows

GitHub ha creado dos clientes Git: uno para Windows y otro para Mac. Estos clientes son un claro ejemplo de herramientas orientadas a flujo de trabajo, en vez de proporcionar toda la funcionalidad de Git, se centran en conjunto conservador de las funcionalidades más utilizadas que colaboran eficazmente. Tienen este aspecto:

GitHub para Mac.
Figure 155. GitHub para Mac.
GitHub para Windows.
Figure 156. GitHub para Windows.

Se diseñaron para parecer y funcionar de una forma muy similar, por tanto, en este capítulo las trataremos como un mismo producto. Aquí no encontrarás un informe detallado de estas herramientas (para eso tienen su propia documentación), aunque sí hay un recorrido por la vista de “cambios” (que es donde pasaremos la mayor parte del tiempo).

  • A la izquierda se encuentra la lista de repositorios que el cliente tiene en seguimiento. Se pueden añadir un repositorio (bien por clonación o agregándolo localmente) pulsado en el icono “+” que está en la parte superior de este área.

  • En el centro está el área de entrada de commit, en la que puedes introducir el mensaje del commit y seleccionar los archivos que se tienen que incluir. (En Windows, se visualiza el histórico de commit directamente debajo mientras que en Mac, lo hace en una pestaña separada.)

  • En la parte derecha está el visor de diferencias que muestra los cambios producidos en el directorio de trabajo o los cambios que se incluyeron en el commit seleccionado.

  • Por último, se debe tener en cuenta que el botón “Sync”, en la parte superior derecha, es el principal método de interactuar con la red.

Note

Para usar estas herramientas no es necesario tener una cuenta en GitHub. Aunque se diseñaron como punto fuerte del servicio GitHub y del flujo de trabajo recomendado, realmente funcionan con cualquier repositorio y pueden realizar las operaciones de red con cualquier servidor Git.

Instalación

GitHub para Windows se puede descargar de https://windows.github.com y GitHub para Mac de https://mac.github.com. Cuando la aplicación se ejecuta por primera vez, realiza un recorrido por toda la configuración inicial, es decir, se configura el nombre y la dirección de correo electrónico, así como realiza las configuraciones normales para muchas opciones de configuración habituales como la caché de credenciales o el comportamiento del salto de línea (CRLF).

Ambos están “siempre actualizados” - las actualizaciones se descargan e instalan en segundo plano mientras la aplicación está abierta. Incluyen un práctica versión completa de Git que significa que muy probablemente no tengas que preocuparte más de actualizarlo manualmente nunca más. El cliente de Windows incluye un acceso directo para lanzar un Powershell con Posh-git, que veremos más adelante en este capítulo.

El siguiente paso consiste en indicarle a la herramienta algún repositoria para que comience comience a trabajar. El cliente te muestra una lista con los repositorios a los que tienes acceso en GitHub para que puedas clonarlos en un solo paso. Si también dispones de repositorios locales, simplemente arrastra los directorios desde Finder o desde el Explorador de Windows hasta la ventana del cliente Github y se incluirán en la lista de repositorios a la derecha.

Flujo de trabajo recomendado

Una vez instalado y configurado el cliente GitHub está listo para utilizarse en muchas tareas Git habituales. El flujo de trabajo previsto para esta herramienta se denomina “Flujo GitHub.” Veremos con más detalle esto en El Flujo de Trabajo en GitHub, pero, en esencia, consistirá en (a) realizar commits sobre una rama y (b) sincronizarse con un repositorio remoto con cierta regularidad.

La gestión de ramas es uno de los puntos en donde las dos herramientas varían. En Mac, hay un botón en la parte superior de la ventana para crear una rama nueva:

Botón ``Create Branch'' en Mac.
Figure 157. Botón “Create Branch” en Mac.

En Windows, esto se realiza escribiendo el nombre de la nueva rama en la componente de gestión de ramas:

Creación de una rama en Windows.
Figure 158. Creación de una rama en Windows.

Una vez creada la rama, realizar nuevos commits sobre ella es bastante sencillo. Realizas algunos cambios en el directorio de trabajo y, si vuelves a la ventana del cliente GitHub, te muestra los archivos que han sido modificados. Introduce un mensaje para el commit, seleccionas los archivos que quieres incluir y pulsas sobre el botón “Commit” (ctrl-enter o ⌘-enter).

La principal forma de interactuar con otros repositorios en la red es mediante la funcionalidad “Sync”. Internamente Git dispone de operaciones diferenciadas para mandar (push), recuperar (fetch), fusionar (merge) y reorganizar (rebase), aunque los clientes GitHub juntan todas ellas en una sola funcionalidad multi-paso. Esto es lo que ocurre cuando se pulsa el botón Sync:

  1. git pull --rebase. Si esto falla es debido a conflictos en la fusión, echa mano de git pull --no-rebase.

  1. git push.

Esta es la secuencia más frecuente de comandos de red cuando se trabaja de esta manera, así que meter estos comandos ahorra un montón de tiempo.

Resumen

Estas herramientas resultan ideales para el flujo de trabajo para el que fueron diseñadas. Tanto desarrolladores como no desarrolladores pueden ponerse a colaborar en un proyecto en cuestión de minutos y la mayoría de las buenas prácticas para esta forma de trabajo vienen integradas con las herramientas. Sin embargo, si el flujo de trabajo es distinto o si se quiere más control sobre cómo y dónde se hacen las operaciones con la red, quizás sea más conveniente algún otro cliente o la línea de comandos.

Otras herramientas gráficas

Existen otra serie de cliente Git con interfaz gráfica que oscilan entre las herramientas especializadas con un único fin y las aplicaciones que intentan presentar todo lo que Git puede hacer. La página oficial de Git tiene una sucinta lista de los clientes más utilizados en http://git-scm.com/downloads/guis. Aunque en la wiki de Git se puede encontrar una lista más completa https://git.wiki.kernel.org/index.php/Interfaces,_frontends,_and_tools#Graphical_Interfaces.