csharp-gitreader

Analizar repositorios Git en C# con GitReader

GitReader es una biblioteca de código abierto para C# que nos permite acceder y analizar repositorios Git de manera eficiente sin necesidad de depender de la instalación de git.exe en el sistema.

Esta biblioteca es muy útil si necesitamos interactuar con un repositorios Git, proporcionando una API sencilla y directa para acceder a la información del repositorio.

Por ejemplo, podemos usarla para extraer información de un equipo, comprobar errores, asociarlo con nuestro sistema de gestión, o crear dashboard, entre otras muchas ideas posibles.

Características de GitReader,

  • Sin dependencias externas: No requiere git.exe para operar.
  • Acceso directo a repositorios Git: Proporciona una API para leer y analizar la estructura y el contenido de los repositorios.
  • Multiplataforma: Funciona en Windows, macOS y Linux.
  • Eficiente y rápida: Diseñada para un acceso rápido y eficiente a los datos del repositorio.

Instalación de GitReader

Para comenzar a utilizar GitReader en tu proyecto de .NET, primero debes instalar la biblioteca a través de NuGet. Puedes hacerlo mediante el Administrador de paquetes NuGet en Visual Studio o utilizando la consola de NuGet.

Install-Package GitReader

Cómo usar GitReader

Una vez que hayas instalado GitReader, puedes empezar a usarlo para acceder y analizar repositorios Git. A continuación, se presentan varios ejemplos que ilustran cómo interactuar con los repositorios Git utilizando GitReader.

Son solo dos ejemplos sencillos, de dos operaciones. Es posible realizar muchas (muchas) más funciones con el repo. Consultar la documentación del proyecto, que incorpora muchos ejemplos.

Abrir un repositorio

Este ejemplo muestra cómo abrir un repositorio Git y obtener información básica sobre el mismo.

using GitReader;
using GitReader.Structures;
using System;
using System.IO;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        // Ruta al repositorio Git
        string repoPath = "ruta/al/repositorio/.git";
        
        // Abrir el repositorio
        using var repository = await Repository.Factory.OpenStructureAsync(repoPath);
        
		if (repository.Head is Branch head)
		{
		    Console.WriteLine($"Name: {head.Name}");
		
		    // Get the commit that this HEAD points to:
		    Commit commit = await head.GetHeadCommitAsync();
		
		    Console.WriteLine($"Hash: {commit.Hash}");
		    Console.WriteLine($"Author: {commit.Author}");
		    Console.WriteLine($"Committer: {commit.Committer}");
		    Console.WriteLine($"Subject: {commit.Subject}");
		    Console.WriteLine($"Body: {commit.Body}");
		}
    }
}

Obtener un commit específico

En este ejemplo, se obtener un commit específico.

using GitReader;
using GitReader.Structures;
using System;
using System.IO;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        // Ruta al repositorio Git
        string repoPath = "ruta/al/repositorio/.git";
        
        // Abrir el repositorio
        using var repository = await Repository.Factory.OpenAsync(repoPath);
        
		if (await repository.GetCommitAsync(
		    "1205dc34ce48bda28fc543daaf9525a9bb6e6d10") is Commit commit)
		{
		    Console.WriteLine($"Hash: {commit.Hash}");
		    Console.WriteLine($"Author: {commit.Author}");
		    Console.WriteLine($"Committer: {commit.Committer}");
		    Console.WriteLine($"Subject: {commit.Subject}");
		    Console.WriteLine($"Body: {commit.Body}");
		}
    }
}