Cómo manejar Git como un experto desde Android Studio

Cómo manejar Git como un experto desde Android Studio
Sin comentarios Facebook Twitter Flipboard E-mail

Hoy en día no nos imaginamos el desarrollo de un proyecto de software que no incluya un [control de versiones][5fb469a7], entre las diferentes opciónes para un VCS, Git, sin duda, se ha posicionado favorablemente por delante de otros grandes como Subversion y Mercurial.

La curva de aprendizaje que este tipo de herramientas suele implicar suele ser bastante alta, ya que la gran variedad de características y opciones que incluyen lo convierten en recursos complejos a la vez de muy potentes.

Tanto para los menos experimentados, como para los expertos manejando un VCS, es importante tener buenas herramientas o un entorno lo suficientemente configurado para tratar con el mismo de manera rápida y efectiva.

Este post acerca, a usuarios de entornos de desarrollo de la familia de [JetBrains][aec9d229], diversas curiosidades y ejemplos de como manejar algunas de las herramientas para el manejo de un control de versiones, logrando una mayor cohesión entre el desarrollo y el versionado del mismo.

Comparaciones

Entre otros beneficios que obtenemos utilizando un control de versiones, está el de poder comparar archivos con sus diferentes estados a lo largo del tiempo. Para ello, [JetBrains][aec9d229] dispone, desde mi punto de vista, de una de las herramientas de _diff / merge_ más potentes e intuitivas a utilizar a la hora de comparar cambios.

Un buen uso de estas herramientas permite agilizar bastante el trabajo del día a día, ya que estas comparaciones son frecuentes a medida que se modifica el código (añadir, borrar y cambiar) o se revisa. Además, estas modificaciones suelen ser complejas de representar, por lo que no es fácil encontrar una buena herramienta que exprese bien los cambios.

IntelliJ como herramienta de _diff_ y _merge@#@

A partir de la versión 2016 de IntelliJ, [JetBrains][aec9d229] ha incluído una opción muy interesante llamada ['Create command line launcher'][7843d9cd], la cuál Android Studio ha heredado en su actualización a la versíon [2.2][c9d1efd1].

Esta nueva opción, permite utilizar el _diff / merge_ de IntelliJ o Android Studio de manera externa, de tal modo que las podríamos utilizar tanto desde línea de comandos como desde nuestro cliente de VCS favorito.

Así, entre otras situaciones interesantes podríamos resolver un conflicto o comparar varios archivos utilizando estas herramientas externas. Como alternativa, herramientas como [Kaleidoscope][8e5e7c90] o [Filemerge][3d57ed6e] también están orientadas al comparado archivos.

La gran mayoría de clientes de control de versiones suelen permitir utilizar herramientas _diff / merge_ de manera externa, si eres usuario de algún entorno de [JetBrains][aec9d229], no tienes escusa para no utilizarlas.

El cliente externo que yo suelo utilizar es [SourceTree][2ed978b9] de [Atlassian][5ac4ea11]. Para configurar el diff / merge de Android Studio en este cliente tan solo es necesario configurar la ruta del binario creado por IDE (por defecto /user/local/bin/studio) en la sección de ajustes de [SourceTree][2ed978b9]: Settings/Diff, seleccionando la herramienta externa como other junto a los parámetros apropiados.

Comparar el archivo actual con su versión una rama en particular

IntelliJ y Android Studio permiten comparar el archivo abierto en el editor con su respectiva versión en otra rama. Esto puede ser interesante en varias situaciones como revisiones de código o _pull requests_, o verificar si un conflicto se ha solucionado correctamente.

Esta opción, disponible en los menús o buscando directamente ( ⌘ + A ) por _Compare with branch_, permite seleccionar cualquier rama existente en el control de versiones, tanto local como remota para comparar los cambios con la herramienta _diff_.

Comparar un commit anterior

La opción _Compare with..._ nos permitirá mediante un _pop_-up seleccionar rápidamente, un _commit_ que hayamos realizado en algún momento anterior para comparar el archivo que tengamos abierto.

Si en cambio, queremos mostrar la historia de _commits_ por donde el archivo que tengamos abierto ha ido cambiado, podemos utilizar la opción _Show history..._, la cuál utilizará un panel fijo en la parte inferior del IDE.

Manejando los cambios

A menudo, después de editar varios archivos, puede ser útil comprobar qué cambios han sido realizados desde el último _commit_, la opción _local changes_ pondrá el foco en un panel inferior mostrando todos los archivos editados.

Sin leventar las manos del teclado podremos realizar acciones como:

Seleccionar arhivo(s) y hacer commit - ( ⌘ + K )


Mostrar _diff_ con las modificaciones respecto al último commit - **⌘ + D **


Restaurar los cambios de archivo rápidamente con la opción _revert_ - **⌥ + ⌘ + Z **

Esta opción, además, puede ser utilizada en otros contextos aparte del _log_. Con cualquier archivo podemos utilizar la opción _revert_ para restaurar los cambios respecto a la versión existente en el control de versiones.

_Nota_: Normalmente, los cuadros de diálogo pueden cerrarse via tab + enter

Mostrar el log del control de versiones

Pese a que, personalmente, me gustan más clientes como [SourceTree][2ed978b9], el cuál tiene una forma clara e intuitiva de mostrar el _log_, Android Studio e IntelliJ también implementan esta característica, podemos acceder con la opción _Show VCS log_.

Como ventajas, al estar integrado dentro del IDE aprovecha todas las capacidades de navegación que posee IntelliJ, por lo tanto, podremos interactuar con el _log_ fácil, rapida y visualmente mediante el teclado.

Si seleccionamos cierto _commit_ y con _find action_ ( ⇧ + ⌘ + A ) comenzamos a escribir la opción deseada, el entorno interactuará en el contexto donde esté el _commit_, de tal modo que podríamos hacer _reset_, _checkout_ y _cherrypick_ entre otros de manera rápida y cómoda.

Además, podemos abrir comparaciones con la herramienta _diff_ de manera sencilla posicionandonos en un commit y pulsando ( ⌘ + D ).

VCS operations popup ( ⌃ + V )

De forma sencilla podemos mostrar un _popup_ con las opciones más utilizadas trabajando con un control de versiones: _commit_, _branches_, operaciones de _stash_, etc.

Realizando commits

Uno de los requisitos clave a la hora de utilizar adecuadamente un control de versiones es realizar _commits_ con poca frecuencia y de la manera más atómica posible. Se considera que un commit es atómico cuando las modificaciones contenidas en él hacen referencia a un sólo cambio, además, un _commit_ debería tener un título claro, conciso y descriptivo.

Sin embargo, puede llegar a ser tedioso, en entornos donde se utilize un cliente de terceros o una línea de comandos sin una gran personalización, realizar commits de manera rápida.

Commit rápido - ( ⌘ + K ) + (tab + enter)

Utilizando el cliente VCS integrado de Android Studio / IntelliJ, y probablemente alguno más perteneciente a la familia de JetBrains, con el atajo ( ⌘ + K ) + (⇥ + enter) podremos tener un commit listo en 5 segundos.

Además, podemos activar diversas opciones como inspeccionar el código antes de realizar el commit, organizar imports o seleccionar los cambios a incluir en el commit en función de los archivos modificados.

Integración con [GitHub][b65ae60d]

IntelliJ, Android Studio y seguramente, otros entornos de la famlia de JetBrains ofrecen una integración con [GitHub][b65ae60d], esto brinda al IDE de ciertas características interesantes que pueden ser de bastante utilidad si trabajamos cotidianamente con esta plataforma.

Obtener links directos al repositorio

Ya sea en el explorador de archivos del proyecto, o bien editando un archivo, la acción _Open on GitHub_ abrirá tu navegador con la versión remota de dicho archivo.

Además, si lanzamos esta opción con un texto seleccionado en el editor, este texto también saldrá resaltado en el navegador, muy útil para compartir entre miembros del equipo a la hora de mostrar algo.

Crear un Pull Request

La opción de _Create Pull Request_ permite crear _Pull Requests_ en [GitHub][b65ae60d] utilizando como rama base la que tengamos configurada como principal en el repositorio, y como candidata al _merge_ la que estemos trabajando en el IDE.

Crear un Gist

Análogamente, podemos crear Gists en [GitHub][b65ae60d] tanto privados como anónimos, con la opción _Create Gist_.

Referencias

[How to write a commit message][7bcdcf8a] - Chris Beams.

[Version Control Help][a9927f4d] - IntelliJ IDEA

Comentarios cerrados
Inicio