哪种语言有最好的Git API绑定?

时间:2010-10-27 15:34:37

标签: c# c git binding

我正在寻找建立一个与git密切联系的应用程序..

是否有可用的语言绑定?如果有,哪些是最全面的?

这意味着要去Bare Metal C吗?

或者perl / python / php / C#是否有一组完整的绑定?

由于

丹尼尔

4 个答案:

答案 0 :(得分:76)

在某些编程语言中使用Git有三种不同的方法:

  • Git的重新实现用不同的语言。这就是以下项目的作用:

    • JGit ,这是在Java中重新实现Git(由EGitEclipse Git插件和Gerrit Code Review使用),
    • Grit 是Ruby库,用于以面向对象的方式从git存储库中提取信息,其中包括部分本机Ruby实现。用于例如作者:GitHub。
    • GitSharp这是在C#for .NET和Mono中重新完成Git,并且遵循JGit wrt。功能,
    • Dulwich这是Git文件格式和协议的纯Python读写实现。
    • Git::PurePerl是Git存储库的纯Perl接口(最初主要基于Grit)。
    • Glip是“PHP中的git库” - 纯PHP实现。由其作者用于eWiki。
    • NGit Monodevelop使用的JGit的.NET端口


    重新实现的问题是它们并不总是实现完整功能,有时候实现错误。另一方面,他们是原生的,实现良好的表现;它们的许可可能与Git的C(原始)实现不同,后者是GPLv2。

  • Wrappers ,它调用Git命令并将其包装成某种形式,适用于目标语言。

    • 使用git分发的Git.pm模块(由其某些命令使用),Git::WrapperGit::Repository为Perl包装git命令。
    • JavaGit是一个Java API,通过调用git命令提供对git存储库的访问。
    • GitPython是一个Python库,用于通过调用Git可执行文件和解析输出来与Git存储库进行交互。
    • hs-libgit是gust的Haskell包装器。


    包装器的问题在于它们可能很慢(它们需要分配git进程),并且它们需要安装git才能工作。

    另请注意,git本身具有高度脚本化(例如使用shell脚本),这要归功于除了针对最终用户(瓷器)的更高级别命令之外,它还提供了用于编写脚本的低级命令(管道)。

  • 最后有绑定到libgit2 ,这意味着它是具有可靠API的可重入链接库(是Google Summer of Code 2010项目)。

    • libgit2本身是一个可移植的纯C实现。
    • Rugged - Ruby绑定。
    • php-git - PHP绑定。
    • luagit2 - Lua绑定。
    • GitForDelphi - Delphi绑定。
    • libgit2sharp - .NET绑定。
    • pygit2 - Python绑定。
    • Geef是一个简单的Erlang NIF,它将一些libgit2库函数公开给Erlang。 Monodevelop使用.NET端口进行JGit


    Libgit2是一个很新的项目;它正在进行中,所以并非所有事情都在实施时实施。有关详细信息,请参阅libgit2 homepage

所有这些信息都可以在Git Wiki上的InterfacesFrontendsAndTools页面找到

答案 1 :(得分:2)

您可能尝试不使用API​​。 git是一组不同抽象级别的实用程序。您应该能够构建一组全面的实用程序,通过调用这些实用程序并处理它们的输出来工作。许多高级git命令都是shell脚本或perl脚本就是这样做的,所以你在git源代码中有很多例子可以作为例子使用。

开头的好例子:

  • magit:用emacs lisp编写的emacs的git界面

  • git gui:tcl,附带git

  • gitk:tcl,还附带git

  • gitview:python,来自contrib目录中的git。

  • tig:C,git的文本模式历史记录。

答案 2 :(得分:1)

取决于你想要的东西,用C / C#最舒服的外观。 Git是用C语言编写的,所以如果你想要速度,那么也许你应该选择它。但是如果你想要代码清晰度和编写的简易性,GitSharp可能是一个更好的选择。

答案 3 :(得分:0)

我不确定它是否是最好的,但对于.net,有GitSharp