Git es un administrador de código fuente muy famoso en el mundo del Open Source, que ha venido desplazando al hijo de Apache, Subversion. Git  ha tenido una altísima difusión, dadas sus principales características de poder funcionar totalmente offline y de ser supremamente ágil y veloz en los branches gracias a su acercamiento a través de Snapshots de versiones en vez de deltas. Es completamente descentralizado. Solo se requiere conexión para hacer merge de los cambios en un servidor externo (en el lenguaje Git esto se conoce como push), o para obtener una última versión externa (pull).

Creado en 2005 por Linus Torvalds para satisfacer la necesidad del control de versiones que tenía el propio Linux, tan popular se ha vuelto este administrador escrito mayormente en C y de código abierto, que en el mundo .net también ha comenzado a incursionar y de manera similar, herramientas y servicios .net ya han comenzado a darle soporte. Por ejemplo los WebSites de Windows Azure ahora soportan que desde Git se pueda hacer push directamente, de manera que sitios por ejemplo escritos en PHP se pueden publicar a la nube de inmediato, sin salirse de Git. De hecho, los SDKs que tiene Windows Azure para Linux y MAC, son de código abierto y están hospedados en el servidor de Git,  GitHub. De la misma manera, cualquier solución .net y en general cualquier archivo puede ponerse en Git para hacer su control de versiones.

Existe una versión de Git para Windows que por defecto soporta manejo a través de la consola tradicional de Windows o de un bash que instala específicamente para que todo sea más a la usanza Unix. Sobre esta versión también se han desarrollado varios clientes Windows como tal.

Explorando varios de esos clientes, el oficial de Git visual para Windows es muy lindo y nos recuerda el metro style de Zune y que por si fuera poco se instala con Click Once (o algo supremamente parecido).

image

Con estas herramientas podemos controlar nuestros repositorios de Git que para nosotros usuarios de Windows, no son más que folders con los proyectos que manejamos.

Sin embargo, si ustedes son como yo que cuando estamos desarrollando en .net, no nos queremos salir de allí, existen numerosos plugins que nos permiten conectar VS directamente a Git. Pero si son aún más obstinados (como yo también) y no les gusta tener un montón de botones por todo lado y quieren usar Git en modo consola desde VS (realmente pienso que una de las grandes ventajas de Git y de SVN es la gran versatilidad que adquieren cuando se están trabajando desde consola) , en ese caso hay un conjunto de operaciones que nos permitirá integrar Git a PowerShell y obviamente, esto nos habilita de inmediato tenerlo en la consola de NuGet que es un sistema administrador de paquetes .net Open Source basado en consola, que además brinda otras muchas ventajas dado que como deberían saber está altamente integrado a PowerShell.

De manera que aprovechando un encapsulamiento de Git que hizo dahlbyk para PowerShell llamado posh-git, podemos desde dentro de Visual Studio operar con NuGet sin necesidad de tener que salirnos a la consola o a otro cliente.

Así que ya tenemos instalado Git en nuestra máquina Windows (sí, aún Windows 8). Lo que sigue entonces es hacer un clone de posh-git. Esto se puede hacer desde la consola de Windows, desde el Bash o desde la aplicación visual. Con ese clone, se estarán descargando una copia de la versión actual de ese proyecto con todas sus fuentes, a la carpeta en la que se encuentren ubicados en el momento de ejecutar el comando.

image

En este ejemplo observamos como habiendo creado una carpeta para proyectos en Git en la ruta c:\git (o donde ustedes quieran) nos ubicamos allí con el bash y creamos una nueva carpeta para descargar la copia y ubicándonos dentro de ella ejecutamos el clone del proyecto en la dirección https://github.com/dahlbyk/posh-git.git y luego observando el contenido vemos que existe el script install.ps1 que es el que nos proveerá la integración completa con PowerShell para mostrar el estado de los branches, y tab completition para mayor agilidad.

Para poder ejecutar este script es necesario configurar PowerShell para que pueda ejecutar scripts.

image

Por ejemplo al consultar aquí en mi PowerShell veo que puedo ejecutar scripts remotos firmados. Pero podría ser que estuvieran restringidos. En este caso, hemos de darle permisos de RemoteSigned o Unrestricted. Para hacerlo, se debe abrir PowerShell con permisos de administrador y ejecutar:

Set-ExecutionPolicy RemoteSigned –Confirm

Luego ejecutamos install.ps1 y listo!

De esta manera, ya podemos ir a nuestra consola de NuGet en Visual Studio (2010 o 2012) y proceder a trabajar con Git sin salirnos de allí:

image

Este pantallazo es sacado de VS2012RC con la Consola de Administración de Paquetes abiertas y trabajando con Git. Obsérvese cómo me ubico en el nuevo proyecto que quiero incluir en el controlador de versiones. Allí uso todo el poder de PowerShell para escribir el archivo de exclusiones de Git (no todos los archivos van al control de versiones. Por ejemplo los ejecutables y obj). Esta función podría parametrizarse para poder ejecutarla con las rutas correctas para cada proyecto. Luego de haber escrito el archivo de exclusiones y de haberlo revisado, agrego mi proyecto a Git con un sencillo git init que operará sobre la carpeta actual. Ya con el repositorio listo, le agrego la carpeta con todos los fuentes WNexter  y después de esto para chequear reviso con git status y vemos como lista todos los archivos puestos en stage (listos para ser confirmados).