libgit2

2025-12-11 0 736

libgit2 gitable链接

建立状态
分支建立
v1.9分支机构
v1.8分支机构
每晚建造

libgit2是一种可移植的,纯C实现,以固定API为链接的库提供的git核心方法,可以在您的应用程序中构建git功能。

libgit2用于各个地方,从GUI客户到托管提供商(“ Forges”)以及无数的公用事业以及两者之间的应用程序。因为它是用C编写的,所以可以通过“绑定”提供任何其他编程语言,因此您可以在Ruby,.Net,.net,Python,Node.js,Rust等中使用它。

libgit2经过非常宽松的许可(GPLV2,具有特殊链接例外)许可。这意味着您可以通过任何类型的软件链接在库中,而无需使该软件属于GPL。 libgit2的更改仍将在其GPL许可下涵盖。

目录

  • 使用libgit2
  • 快速开始
  • 得到帮助
  • 它可以做什么
  • 可选依赖性
  • 初始化
  • 线程
  • 会议
  • 构建libgit2使用cmake
    • 建筑
    • 安装
    • 高级用法
    • 编译器和链接器选项
    • macos
    • ios
    • 安卓
    • 明格
  • 语言绑定
  • 我该如何贡献?
  • 执照

使用libgit2

这些说明中的大多数都假定您是在C中编写的应用程序,并且想直接使用libgit2 。如果您使用C,并且正在用不同的语言或平台编写。NET,Node.js或Ruby,那么您可能会有一种“语言绑定”,您可以用来照顾呼叫到本机代码的混乱任务。

但是,如果您直接使用libgit2 – 因为您正在C中构建应用程序 – 那么您可能可以使用现有的二进制文件。 VCPKG和Conan软件包经理有包装。 libgit2在自制和大多数Linux发行版中可用。

但是,这些版本可能已过时,我们建议在可能的情况下使用最新版本。值得庆幸的是, libgit2并不难编译。

快速开始

建造libgit2的先决条件

  1. CMAKE,建议安装到您的PATH中。
  2. Python由我们的测试框架使用,应安装到您的PATH中。
  3. C编译器: libgit2是C90,应在大多数编译器上进行编译。
    • Windows:建议使用Visual Studio
    • Mac:建议XCODE
    • UNIX:建议使用GCC或Clang。

建造

  1. 在libgit2源目录下创建一个构建目录,然后更改为: mkdir build && cd build
  2. 创建CMAKE构建环境: cmake ..
  3. 构建libgit2 : cmake --build .

这些步骤麻烦?阅读我们的故障排除指南。下面提供了更详细的构建指南。

得到帮助

与我们聊天

  • 通过IRC:在Libera上加入# libgit2 。
  • 通过Slack:访问Slack。 libgit2 .org注册,然后加入我们的# libgit2

得到帮助

如果您对图书馆有疑问,请务必查看API文档。如果您仍然有疑问,请在Slack上与我们联系,或在Stackoverflow上发布一个问题(带有libgit2标签)。

报告错误

请打开一个GitHub问题,并提供尽可能多的信息。如果可能,请提供说明您看到的问题的示例代码。如果您仅在特定存储库上看到错误,请在可能的情况下提供链接。

我们要求您不为错误报告打开GitHub问题以寻求帮助。

报告安全问题

请查看Security.md。

它可以做什么

libgit2使您能够以您选择的编程语言管理GIT存储库。它在生产中用于为包括Github.com,塑料SCM和Azure DevOps在内的许多应用程序提供动力。

它不打算替换GIT工具或其面向用户的命令。某些API类似于管道命令,因为命令与GIT系统的概念紧密相符,但是用户输入的大多数命令都超出了该库直接实现的范围。

库提供:

  • SHA转换,格式和缩短
  • 摘要ODB后端系统
  • 提交,标签,树和斑点解析,编辑和写作
  • 树遍历
  • 修订步行
  • 索引文件(登台区)操纵
  • 参考管理(包括包装参考)
  • 配置文件管理
  • 高级存储库管理
  • 螺纹安全性和重新输入
  • 描述性和详细错误消息
  • …以及更多(超过175个不同的API呼叫)

由于libgit2纯粹是GIT系统的消费者,因此我们必须适应上游的变化。这有两个主要后果:

  • 一些更改可能需要我们更改提供的界面。尽管我们尝试以通用的方式实施功能,以便不需要未来的更改,但我们不能承诺完全稳定的API。
  • 由于我们必须跟上上游行为的变化,因此我们可能在某些领域落后。我们通常会在我们的问题跟踪器中使用标签“ git更改”来记录这些不兼容。

可选依赖性

尽管库提供的git功能很少,但一些推荐的依赖项用于性能或完整功能。

  • 哈希生成:git使用sha1dc(碰撞检测SHA1)进行默认哈希生成。 SHA256支持是实验性的,并且MacOS和Windows上的系统库或UNIX系统上的HTTPS库提供了优化的支持。
  • 线程:由Windows上的系统库以及UNIX系统上的Pthreads提供。
  • HTTPS:由MACOS和Windows上的系统库,或其他UNIX系统上的OpenSSL或MBEDTL提供。
  • SSH:由libssh2或通过调用Openssh提供。
  • Unicode:由Windows和MacOS上的系统库提供。

初始化

图书馆需要跟踪某些全球状态。称呼

 git_ libgit2 _init();

在调用任何其他libgit2函数之前。您可以多次调用此功能。匹配数量的电话

 git_ libgit2 _shutdown();

将释放资源。请注意,如果您有工作线程,则应在这些线程退出调用git_ libgit2 _shutdown 。如果您需要协调此事的协助,只需在启动时拨打git_ libgit2 _init ,然后在关闭时git_ libgit2 _shutdown即可。

线程

请参阅线程以获取信息

会议

有关我们使用的外部和内部API/编码约定的概述,请参见约定。

构建libgit2使用cmake

建筑

libgit2在大多数平台上构建,而没有任何外部依赖性作为要求。 libgit2是在所有平台上使用CMAKE(2.8版或更新)构建的。

在大多数系统上,您可以使用以下命令构建库

 $ mkdir build && cd build
$ cmake ..
$ cmake --build .

要在构建中包含示例,请使用cmake -DBUILD_EXAMPLES=ON ..而不是cmake ..然后可以在build/examples中找到相对于Toplevel目录的构建可执行文件。

另外,您可以将CMAKE GUI工具指向CMakelists.txt文件,并生成平台特定的构建项目或IDE工作区。

如果您不熟悉CMAKE,则更详细的解释可能会有所帮助。

高级选项

您可以为cmake指定许多选项,这些选项将改变libgit2的构建方式。要使用此功能,请在初始cmake配置期间指定-Doption=value 。例如,启用SHA256兼容性:

 $ mkdir build && cd build
$ cmake -DEXPERIMENTAL_SHA256=ON ..
$ cmake --build .

libgit2选项:

  • EXPERIMENTAL_SHA256=ON :打开sha256兼容性;请注意,这是一个不兼容的变化,因此为什么将其标记为“实验”

构建选项:

  • BUILD_EXAMPLES=ON :构建示例代码的套件
  • BUILD_FUZZERS=ON :构建模糊套件
  • ENABLE_WERROR=ON :使用-Werror或等效构建,这将编译器警告变成libgit2代码库中的错误(但不是其依赖关系)

依赖项选项:

  • USE_SSH=type :启用SSH支持并选择选择提供商;可以将type设置为libssh2exec (将执行外部OpenSSH命令)。 ON libssh2的暗示;默认为OFF
  • USE_HTTPS=type :启用HTTPS支持并选择选择提供商;可以将type设置为OpenSSLOpenSSL-Dynamic (不要针对OpenSSL链接,而是动态加载它), SecureTransportSchannelWinHTTP ;默认值是MacOS上的SecureTransport ,Windows上的WinHTTP ,以及在其他平台上检测到OpenSSLmbedTLS的哪个。默认为ON
  • USE_SHA1=type :选择要使用的SHA1机制;可以将type设置为CollisionDetectionHTTPS使用系统或HTTPS提供商,或OpenSSLOpenSSL-DynamicOpenSSL-FIPS (在OpenSSL中使用符合FIPS的例程), CommonCryptoSchannel 。默认为CollisionDetection 。保留此选项以使其向后兼容,不应更改。
  • USE_SHA256=type :选择要使用的SHA256机制;可以将type设置为HTTPS ,以使用系统或HTTPS驱动程序, builtinOpenSSLOpenSSL-DynamicOpenSSL-FIPS (在OpenSSL中使用CommonCryptoSchannel中使用FIPS符合FIPS的例程)。默认为HTTPS
  • USE_GSSAPI=<on/off> :启用gssapi在unix上进行spnego身份验证。默认为OFF
  • USE_HTTP_PARSER=type :选择HTTP解析器;外部http-parser依赖项的http-parserllhttp的外部llhttp依赖关系,或者是builtin 。默认为builtin
  • REGEX_BACKEND=type :选择要使用的正则表达式后端; regcomp_lpcre2pcreregcompbuiltin的之一。默认值是在可用的地方使用regcomp_l ,如果发现pcre,否则使用内置素。
  • USE_BUNDLED_ZLIB=type :选择捆绑的zlib; ONOFF 。默认使用系统ZLIB(如果有),掉回捆绑的Zlib。

定位依赖项

libgit2项目使用cmake ,因为它有助于跨平台项目,尤其是具有许多依赖关系的项目。如果您的依赖项位于非标准位置,则可能需要使用_ROOT_DIR选项来指定其位置。例如,指定OpenSSL位置:

 $ cmake -DOPENSSL_ROOT_DIR=/tmp/openssl-3.3.2 ..

由于这些选项是CMAKE的一般选择,因此它们的文档可能会有所帮助。如果您对依赖关系有疑问,请与我们联系。

运行测试

构建后,您可以使用命令从build目录中运行测试

 $ ctest -V

或者,您可以直接使用

 $ ./ libgit2 _tests

直接调用测试套件很有用,因为它允许您使用-s标志执行单个测试或测试组。例如,运行索引测试:

 $ ./ libgit2 _tests -sindex

要运行一个名为index::racy::diff的单个测试,该测试对应于测试功能test_index_racy__diff

 $ ./ libgit2 _tests -sindex::racy::diff

测试套件将打印a .对于每个通过测试,以及用于任何失败测试的F S表示跳过了测试,因为它不适用于您的平台或特别昂贵。

注意:当您从发行版或主要分支中构建未修改的源树时,应该没有失败的测试。如果您看到测试失败,请与我们联系或打开问题。

安装

要安装库,您可以通过设置来指定安装前缀:

 $ cmake .. -DCMAKE_INSTALL_PREFIX=/install/prefix
$ cmake --build . --target install

高级用法

有关更高级的使用或有关CMAKE的问题,请阅读CMAKE常见问题解答。

声明以下CMAKE变量:

  • CMAKE_INSTALL_BINDIR :在哪里安装二进制文件。
  • CMAKE_INSTALL_LIBDIR :在哪里安装库。
  • CMAKE_INSTALL_INCLUDEDIR :在哪里安装标题到达。
  • BUILD_SHARED_LIBS :构建libgit2作为共享库(默认为on)
  • BUILD_TESTS :构建单元和集成测试套件(默认为ON)
  • USE_THREADS :构建具有线程支持的libgit2 (默认为ON)

要列出所有构建选项及其当前价值,您可以执行以下操作:

 # Create and set up a build directory
$ mkdir build && cd build
$ cmake ..

# List all build options and their values
$ cmake -L

编译器和链接器选项

有几个选项可以控制编译器和链接器的行为。这些标志可能对交叉兼容或专业设置有用。

  • CMAKE_C_FLAGS :设置自己的编译器标志
  • CMAKE_C_STANDARD :C汇编的C标准;默认为C90
  • CMAKE_C_EXTENSIONS :是否支持编译器扩展;默认为OFF
  • CMAKE_FIND_ROOT_PATH :覆盖库的搜索路径
  • ZLIB_LIBRARYOPENSSL_SSL_LIBRARYOPENSSL_CRYPTO_LIBRARY :告诉cmake在哪里可以找到那些特定的库
  • LINK_WITH_STATIC_LIBRARIES :仅链接与系统库的静态版本

macos

如果您想使用Xcode,则可以使用“ -g Xcode”生成Xcode项目。

 # Create and set up a build directory
$ mkdir build && cd build
$ cmake -G Xcode ..

提示

通用二进制支持:

如果要为MacOS 11.0+构建通用二进制文件,则CMAKE在配置时使用-DCMAKE_OSX_ARCHITECTURES=\"x86_64;arm64\"时,请为您设置所有功能。

[弃用]如果要为Mac OS X构建通用二进制文件(10.4.4〜10.6),则如果您使用-DCMAKE_OSX_ARCHITECTURES=\"i386;x86_64\"则CMAKE将其全部为您设置。

ios

  1. 获取iOS CMAKE工具链文件:

您可以使用iOS-cmake之类的预先存在的工具链文件或自己编写。

  1. 指定工具链和系统名称:
  • cmake_toolchain_file变量指向iOS的工具链文件。
  • CMAKE_SYSTEM_NAME应设置为iOS。
  1. 示例命令:

假设您使用的是iOS-cmake工具链,则该命令可能看起来像:

 cmake -G Xcode -DCMAKE_TOOLCHAIN_FILE=path/to/ios.toolchain.cmake -DCMAKE_SYSTEM_NAME=iOS -DPLATFORM=OS64 ..
  1. 建立项目:

生成项目后,在Xcode中打开.xcodeproj文件,选择您的iOS设备或模拟器作为目标,然后构建项目。

安卓

使用make-standalone-toolchain.sh脚本从NDK提取工具链。可选地,在其内部交叉串联并安装OpenSSL。然后创建CMAKE工具链文件,该文件将路径配置为crossCompiler(替换{PATH} ,并完整的路径通往工具链):

 SET(CMAKE_SYSTEM_NAME Linux)
SET(CMAKE_SYSTEM_VERSION Android)

SET(CMAKE_C_COMPILER   {PATH}/bin/arm-linux-androideabi-gcc)
SET(CMAKE_CXX_COMPILER {PATH}/bin/arm-linux-androideabi-g++)
SET(CMAKE_FIND_ROOT_PATH {PATH}/sysroot/)

SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

配置时,添加-DCMAKE_TOOLCHAIN_FILE={pathToToolchainFile}到cmake命令中。

明格

如果您想在启用SSH支持的MingW环境中构建库,则可能需要通过-DCMAKE_LIBRARY_PATH=\"${MINGW_PREFIX}/${MINGW_CHOST}/lib/\" flag在配置时cmake。这是因为CMAKE默认情况下找不到MingW文件夹中的Win32库,您可能会看到一条错误消息,说明CMAKE在配置过程中无法解决ws2_32库。

另一个选项是在配置之前安装msys2-w32api-runtime软件包。该软件包将Win32库安装到/usr/lib文件夹中,默认情况下,该文件夹被CMake识别为库路径。请注意,此软件包是针对MSYS子系统的,这与MINGW不同。

语言绑定

以下是当前可用的与libgit2绑定:

  • C ++
    • libqgit2,qt bindings https://projects.***kde.org/projects/playground/libs/libqgit2/repository/
  • 鸡肉计划
    • 鸡git https://wiki.c*a**ll-cc.org/egg/git
  • d
    • dlibgit https://github.c***om/s-ludwig/dlibgit
  • 德尔菲
    • gitfordelphi https://g*ith*ub.*com/libgit2/gitfordelphi
    • libgit2 -delphi https://**github.c*om/todaysoftware/libgit2-delphi
  • Erlang
    • geef https://github.*c**om/carlosmn/geef
    • git2go https://g*ithu*b.com*/libgit2/git2go
  • gobject
    • libgit2 -glib https://wiki.***gnome.org/projects/libgit2-glib
  • 诡计
    • Guile-Git https://git*lab.c**om/guile-git/guile-git
  • 哈斯克尔
    • hgit2 https://gi*t*h*ub.com/jwiegley/gitlib
  • 爪哇
    • 锯齿状https://gith*ub*.co*m/ethomson/jagged
    • git24J https://github.*c**om/git24j/git24j
  • JavaScript / WebAssembly(浏览器和nodejs)
    • WASM-GIT https://git*hub*.c*om/petersalomonsen/wasm-git
  • 朱莉娅
    • libgit2 .jl https://gith*u*b.*com/julialang/julia/tree/master/master/stdlib/libgit2
  • 卢阿
    • luagit2 https://gi*th*u*b.com/libgit2/luagit2
  • 。网
    • libgit2 Sharp https://g*i*th*ub.com/libgit2/ libgit2 Sharp
  • node.js
    • Nodegit https://*gith*ub.*com/nodegit/nodegit
  • Objective-C
    • Objective-Git https://g*i*th*ub.com/libgit2/objective-git
  • OCAML
    • ocaml- libgit2 https://**git*hub.com/fxfactorial/ocaml-libgit2
  • 鹦鹉虚拟机
    • parrot- libgit2 https://g*ithub*.c*om/letolabs/parrot-libgit2
  • 珀尔
    • git-raw https://*github.*co*m/jacquesg/p5-git-raw
  • Pharo Smalltalk
    • libgit2 -pharo-Bindings https://githu***b.com/pharo-vcs/libgit2-pharo-bindings
  • php
    • php-git2 https://github.*c*o*m/rogergee/php-git2
  • Python
    • pygit2 https://g*i*th*ub.com/libgit2/pygit2
  • r
    • Gert https://docs.rope***nsci.org/gert
    • git2r https://git*hu*b.co*m/ropensci/git2r
  • 红宝石
    • 坚固https://g*i*th*ub.com/libgit2/rugged
    • git2-rs https://*github.c**om/rust-lang/git2-rs
  • 迅速
    • SwiftGit2 https://gi*t*hub*.com/swiftgit2/swiftgit2
  • TCL
    • LG2 https://git*h*ub*.com/apnadkarni/tcl-libgit2
  • 瓦拉
    • libgit2 .vapi https://*g*ith*ub.com/apmasell/vapis/blob/master/libgit2.vapi

如果您启动另一种绑定到libgit2语言,请告诉我们,以便我们将其添加到列表中。

我该如何贡献?

我们欢迎新贡献者!我们有许多标记为“抢夺”和“简单修复”的问题,这些问题是跳入并开始的好地方。我们的杰出项目列表中有更多详细的信息。

请确保检查贡献指南,以了解我们的工作流程以及libgit2编码约定。

执照

libgit2处于GPL2之下,链接例外。这意味着您可以链接到任何程序,专有或开源的库;付费或免费。但是,如果您修改了libgit2本身,则必须将源分配给修改后的libgit2 。

请参阅复制文件以获取完整的许可文本。

下载源码

通过命令行克隆项目:

git clone https://github.com/libgit2/libgit2.git

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

申明:本文由第三方发布,内容仅代表作者观点,与本网站无关。对本文以及其中全部或者部分内容的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。本网发布或转载文章出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,也不代表本网对其真实性负责。

左子网 编程相关 libgit2 https://www.zuozi.net/34141.html

Silk.NET
上一篇: Silk.NET
universal
下一篇: universal
常见问题
  • 1、自动:拍下后,点击(下载)链接即可下载;2、手动:拍下后,联系卖家发放即可或者联系官方找开发者发货。
查看详情
  • 1、源码默认交易周期:手动发货商品为1-3天,并且用户付款金额将会进入平台担保直到交易完成或者3-7天即可发放,如遇纠纷无限期延长收款金额直至纠纷解决或者退款!;
查看详情
  • 1、描述:源码描述(含标题)与实际源码不一致的(例:货不对板); 2、演示:有演示站时,与实际源码小于95%一致的(但描述中有”不保证完全一样、有变化的可能性”类似显著声明的除外); 3、发货:不发货可无理由退款; 4、安装:免费提供安装服务的源码但卖家不履行的; 5、收费:价格虚标,额外收取其他费用的(但描述中有显著声明或双方交易前有商定的除外); 6、其他:如质量方面的硬性常规问题BUG等。 注:经核实符合上述任一,均支持退款,但卖家予以积极解决问题则除外。
查看详情
  • 1、左子会对双方交易的过程及交易商品的快照进行永久存档,以确保交易的真实、有效、安全! 2、左子无法对如“永久包更新”、“永久技术支持”等类似交易之后的商家承诺做担保,请买家自行鉴别; 3、在源码同时有网站演示与图片演示,且站演与图演不一致时,默认按图演作为纠纷评判依据(特别声明或有商定除外); 4、在没有”无任何正当退款依据”的前提下,商品写有”一旦售出,概不支持退款”等类似的声明,视为无效声明; 5、在未拍下前,双方在QQ上所商定的交易内容,亦可成为纠纷评判依据(商定与描述冲突时,商定为准); 6、因聊天记录可作为纠纷评判依据,故双方联系时,只与对方在左子上所留的QQ、手机号沟通,以防对方不承认自我承诺。 7、虽然交易产生纠纷的几率很小,但一定要保留如聊天记录、手机短信等这样的重要信息,以防产生纠纷时便于左子介入快速处理。
查看详情

相关文章

猜你喜欢
发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务