Utilizando Git en Visual Studio

Hace unas semanas vimos las opciones que nos ofrecía Visual Studio Team Services para gestionar nuestro proyecto.

Entre otras, vimos que nos da la posibilidad de crear repositorios para hacer un seguimiento del código que van realizando los miembros del equipo.

Pues bien, en este post vamos a ver cómo sacar el máximo provecho a Git en Visual Studio y cómo podemos sincronizar nuestro código con el repositorio de Visual Studio Team Services.

¿Qué es Git?

Git es un sistema de control de versiones distribuido.

Un sistema de control de versiones se encarga de hacer un seguimiento a todos los ficheros que tengamos en nuestro proyecto, de forma que siempre vamos a tener versiones de aquellos que se vayan modificando. Esto nos permite poder volver en cualquier momento a dichas versiones si lo necesitamos, comparar los cambios que se han ido realizando, ver quién ha realizado los cambios, en qué momento se introdujo un problema que antes no existía, etc.

Dos tipos de sistemas de control de versiones son los más populares: los sistemas centralizados y los sistemas distribuidos.

Los primeros se caracterizan en que existe un servidor central que contiene todos los ficheros versionados. Los miembros del equipo se encargan de sincronizar cambios contra dicho servidor.

Por otro lado, en los sistemas distribuidos los miembros del equipo tienen una copia entera del repositorio en su local. Todos son “servidores”. De esta forma se evita el problema de perder el código si por cualquier causa el servidor se estropease y aporta ventajas a la hora de trabajar en diferentes características sobre un mismo proyecto.

Dado a su naturaleza distribuida, una vez tenemos nuestro repositorio en nuestro local, podemos trabajar sin necesidad de conexión. Todos los cambios a los ficheros que vayamos realizando sobre el repositorio se quedarán almacenados. No obstante, cuando trabajamos en un proyecto, suele existir un repositorio “referencia” sobre el que se sincronizan los cambios realizados. Por tanto, cuando lo consideremos necesario, publicaremos nuestros cambios sobre ese repositorio, y además actualizaremos nuestro repositorio con los cambios realizados por otros miembros del equipo.

Vamos a ver cómo podemos trabajar con Git en Visual Studio.

Creando un nuevo repositorio

Vamos a ver cómo crear un repositorio desde cero, para luego crear un proyecto dentro de éste. En primer lugar, para trabajar con los repositorios desde VS, necesitamos la ventana Team Explorer. Si no la tenemos ya, vamos a View >> Team Explorer. Tras ello nos aparecerá, en general, al lado de Solution Explorer.

GitEnVS001

 

GitEnVS002

Nos aseguramos de estar en el apartado Connect, que es desde donde gestionaremos todos los repositorios que vayamos agregando. Para ello, pulsamos en el botón de Manage Connections.

GitEnVS003

Ahora, para crear un nuevo repositorio, lo que haremos será desplegar Local Git Repositories, pulsar en New, e indicaremos la ruta en la que se creará.

GitEnVS004

Tras ello le damos a Create, ¡y listo!

Añadiendo proyectos al repositorio

Si ahora queremos crear un nuevo proyecto sobre el repositorio, nos vamos al apartado de Home. Aquí podremos ver los cambios que hemos realizado sobre nuestro repositorio, sincronizar cambios con repositorios remotos, ver las ramas que tenemos creadas y cambiar algunos parámetros de configuración del repositorio.

GitEnVS005

En el apartado de Solutions, podremos crear una nueva solución o abrir una que tuviésemos previamente en nuestro ordenador. En nuestro caso, crearemos una nueva. Tras ello, nos aparecerá en el listado de soluciones existentes en nuestro repositorio.

GitEnVS006

Realizando Commits

Recién creado nuestro repositorio, este está vacío. Al añadir un nuevo proyecto, Git detectará como cambios todos los ficheros del proyecto recién agregados, ya que anteriormente no había nada. Si nos dirigimos a Changes, podremos verlo:

GitEnVS007

Para guardar una versión de estos cambios sobre el repositorio, se realiza un commit. Junto a ello se suele escribir un comentario indicando qué cambios se han realizado en el código. Una vez realizado el commit, Git generará un snapshot, y, si en un futuro realizamos un cambio que deseamos revertir, podremos volver a una versión anterior de entre los commits realizados.

Sincronizando los cambios con Visual Studio Team Services

Aunque se trate de un sistema distribuido, como comentamos, es buena práctica sincronizar los cambios de nuestro repositorio con uno remoto, para así evitar problemas en caso de que tengamos problemas con nuestro local.

Dado que ya tenemos un repositorio creado en local, vamos a publicarlo al repositorio de VSTS. Para ello, desde la pantalla Home, le damos a Sync y nos aparecerá lo siguiente:

GitEnVS008

Visual Studio se integra con VSTS y GitHub, de forma que con introducir nuestras credenciales podemos elegir nuestro proyecto de una forma más intuitiva y automáticamente podremos sincronizar nuestro repositorio con el repositorio remoto. Si utilizásemos otro servicio (como BitBucket, por ejemplo), lo que necesitaríamos sería la URL del repositorio remoto que hemos creado en ese servicio. Visual Studio nos pedirá las credenciales y podremos sincronizar a partir de dicho momento todos los cambios.

En nuestro caso, le daremos a Get Started en el apartado de Visual Studio Online (antiguo nombre de Visual Studio Team Services).

GitEnVS009

Introducimos nuestras credenciales y, una vez cargue, tendremos la posibilidad de crear un nuevo repositorio de VSTS o seleccionar uno existente. En nuestro caso, cogeremos uno existente.

GitEnVS010

Para finalizar, ¡pulsamos en Publish y listo! Ya tendremos todos los cambios realizados en nuestro repositorio local en VSTS (¡puedes comprobarlo!).

A partir de este momento no hará falta volver a realizar todo esto. Dado que ya hemos configurado el repositorio remoto, cada vez que vayamos a sincronizar, nos aparecerán los cambios existentes (tanto para descargar como para publicar nosotros), como se puede apreciar en la imagen:

GitEnVS011

Si pulsamos en Sync, se sincronizarán todos los cambios.

Trabajando con ramas Las ramas son líneas independientes de desarrollo. Para hacernos una idea, imaginemos que no estamos utilizando un sistema de control de versiones y queremos desarrollar una característica experimental para nuestro proyecto. Para evitar afectar al código que ya sabemos que funciona, copiaríamos todos los ficheros del proyecto a otro directorio, y experimentaríamos ahí. Si nos gusta el resultado, copiamos los ficheros afectados al directorio original. Si no, lo borramos y listo.

Este es el objetivo de las ramas en Git. En cada rama podremos realizar modificaciones al código sin afectar a lo realizado en otras ramas. Si en algún momento lo deseamos, podemos mezclar los cambios de una rama con otra.

Cuando inicializamos un repositorio, se crea por defecto la rama master.

Para ver las ramas de nuestro repositorio, desde la pantalla Home, le damos a Branches.

GitEnVS012

Para crear una rama nueva, haremos click derecho en master y seguidamente pulsamos en New local branch from.

GitEnVS013

Le damos el nombre que queramos y posteriormente a Create.

GitEnVS014

Automáticamente Visual Studio marcará esa rama como activa (ya que anteriormente dejamos marcada la opción de Checkout branch). Si queremos ir a otra rama, haremos click derecha en ella y pulsamos en Checkout.

Cada vez que hagamos cambios sobre el código, los haremos sobre la rama sobre la que estemos.

Manejando Pull Requests

¿Qué ocurre cuando intentamos sincronizar los cambios realizados en la recién rama con un repositorio remoto? Que Visual Studio nos avisará de que tenemos que publicar antes esa rama, ya que no existe en el repositorio remoto. Para ello, hacemos click derecho sobre la rama y hacemos click en Publish.

A partir de este momento podemos realizar todos los commits que consideremos necesarios e ir sincronizándolos con la rama del repositorio remoto.

Cuando llegue un determinado momento, es posible que queramos reflejar los cambios realizados en la rama sobre la rama principal de nuestro proyecto (que será la rama master en nuestro caso). Para ello, tendremos que realizar un Pull Request.

Si nos vamos a Pull requests desde la ventana Home, se nos abrirá automáticamente nuestra página de Pull Requests del proyecto de Visual Studio Team Services.

Si nos fijamos:

GitEnVS015

VSTS nos informa de que se han hecho cambios sobre DemoBranch. Debido a ello, nos sugiere realizar un Pull Request, para que mezclemos los cambios de dicha rama sobre otra, que, en nuestro caso, será master.

La utilidad de esto reside en que muchos equipos de trabajo siguen un workflow en el que se crean ramas temporales o topic branches, sobre las que se desarrolla una característica particular para luego, una vez se ha completado, incorporar el código desarrollado sobre la rama. Para incorporar los cambios de esa rama a la principal se lleva a cabo un Pull request.

En nuestra DemoBranch, hemos hecho un cambio trivial para ver cómo se realizaría.

Pulsamos en New pull request y nos cargará lo siguiente:

GitEnVS016

Aquí podremos revisar los cambios que se han realizado con respecto a otra rama (solo aparece un commit, pero aparecerían todos los realizados sobre la rama). Si nos fijamos:

GitEnVS017Aquí podemos observar qué ramas se van a mezclar, en concreto, la rama origen y la rama destino. Le damos un nombre al Pull request y le damos a New pull request.

Si no existen conflictos, completaremos el Pull request pulsando en Complete pull request.

GitEnVS018

Con esto, ya tendremos los cambios en la rama principal listos.

Como hemos visto, Visual Studio nos ofrece una magnífica interfaz para controlar de una manera muy intuitiva y visual nuestro repositorio Git, lo cual nos evita hacer uso de comandos y nos facilita el día a día a la hora de trabajar con nuestro código. Si necesitas más ayuda sobre cómo utilizar Git dentro de Visual Studio, puedes visitar este enlace.

Daniel Escribano García

Technical Evangelist Intern

@daesgar90