GitSharp vs NGit

¿Cuál es el estado actual de GitSharp y NGit y cuál es el más adecuado para la automation de Git desde .NET?

  • GitSharp (al less, su Core) era un manual, línea por línea, puerto de JGit. Su desarrollo se ha detenido desde agosto de 2010. Sin embargo, algunos productos aún se basan en él (por ejemplo, Git-dot-aspx ).

  • NGit es un puerto automatizado de JGit. Sigue siendo actualizado contra JGit y se beneficia continuamente de las mejoras y correcciones de errores de JGit. NGit se usa actualmente para llevar las características de Git a MonoDevelop .

En cuanto al performance, clonar un gran repository (Mono o Linux, por ejemplo) con GitSharp fue una experiencia larga y dolorosa. Aunque no lo he intentado con NGit.

Teniendo en count esos hechos, desde una perspectiva de soporte / mantenimiento, le sugiero que use NGit sobre GitSharp.

EDITAR:

El website de GitSharp ahora declara

El desarrollo de GitSharp está actualmente en espera porque creemos que el proyecto libgit2 y sus enlaces C # libgit2sharp son mucho más prometedores para trabajar.

He usado un poco GitSharp, y fue lo suficientemente bueno, incluso hace un año. Creo que la actividad en GitSharp se networkinguce, pero creo que es una implementación mucho mejor. No me gusta que NGit sea un puerto automatizado de JGit en gran medida, incluidas algunas de sus dependencies (GitSharp usa SharpSSH, mientras que NGit usa NSch, un puerto de JSch). Eso significará que puede haber un performance subóptimo y otros problemas, pero no he usado NGit, por lo que no puedo respaldar mi reclamo.

GitSharp es de más alto nivel, la parte de bajo nivel se implementa en GitSharp. Core GitSharp tiene estilo .NET, mientras que NGit es demasiado Java. Actualmente, commands como Commit, Tag no se han implementado en GitSharp, mientras que estos se han implementado en NGit.

Personalmente, prefiero GitSharp, ya que proporciona una implementación pura de .NET. NGit se transporta de forma semiautomática con un set de bibliotecas más grande (JSch, Sharpen) pero sigue siendo .NET puro. Los dlls de .NET puros (AnyCPU) facilitan la implementación. libgit2sharp es solo el contenedor para la biblioteca C y también tenemos que implementar la biblioteca C. La implementación para bibliotecas C es más problemática para apuntar a muchas plataforms y architectures (x86, x64, Windows, Linux)

Como el proyecto de GitSharp no está sincronizado desde jgit en sentido ascendente, tenemos que cambiar a NGit, que se sincroniza con la última jgit a intervalos regulares. Para hacer que el proyecto GitSharp esté vivo, se requieren grandes esfuerzos.

El NGit.dll de nivel inferior puede replace a GitSharp.Core.dll. El GitSharp.dll de nivel superior puede portarse para interactuar con NGit.dll.