2KB项目,专业的源码交易网站 帮助 收藏 每日签到

JGit 源码介绍

  • 时间:2019-01-23 18:33 编辑:2KB 来源:2KB.COM 阅读:409
  • 扫一扫,手机访问
  • 分享
摘要:
JGit 英文原文:An Introduction to the JGit Sources

JGit 是一个纯Java类库,实现了Git版本控制系统。它是一个Eclipse项目,最初是由作为Git库的Egit起始的,提供了将Git集成到Eclipse中的功能。同时JGit进一步被 GerritGitBlit 以及 Jenkins 的 GitClient 插件(还在开发当中)所采用,...

它的许可执照,因为很少的依赖和很低的要求,使其很容易嵌入到任何Java应用中。其核心库需要Java1.5,JSch进行SSH连接,以及JavaEWAH进行快速比特数组的操作。其最新版本是3.1版,并于去年6月发布。New&Noteworthy列出了关于新版本的更多细节。

如何获取

下载页面中列举了获取和集成JGit库的不同方式。其中Maven仓是最常用的一种获取方式。 如果你更倾向于使用OSGi bundles, JGit也提供了p2仓。 当然,你也可以手动下载JGit核心库到本地,再下载JSch和JavaEWAH,并手动将对应的jar包添加到构建路径中。

除了二级制的库文件以外,你可能也对JGit项目的源代码充满兴趣。 有了源代码,你就可以为JGit修改Bug或增加新特性,即使是出于好奇来浏览代码,那也是极好的。

从源码开始

虽然JGit可以被以多种形式使用,但实际上它是作为一组OSGi bundle来开发的。所以这需要在你的IDE中预先安装PDE

想都不用想,JGit的源码那必须是存储在一个Git仓中。所以,第一步就是从下面的Git仓中clone一份代码:https://git.eclipse.org/r/p/jgit/jgit.git

JGit的核心库是一个独立的项目:org.eclipse.jgit。如果你正好是在使用Java 7, Java 7对应的项目org.eclipse.jgit.java7也很有用。这个子项目集成了Java 7中的文件系统API, 这样JGit就具有了更好的对文件操作的可移植性(比如说处理符号链接)。

相关的依赖要在工程中预先设置好,目标平台的设置可以参照org.eclipse.jgit.target项目中的定义。(这些设置隐藏在org.eclipse.jgit.packaging目录中)。概括来说,核心库需要在工程中import下面的几个项目:

  • org.eclipse.jgit — 核心库

  • org.eclipse.jgit.java7 — 支持Java 7文件系统

  • org.eclipse.jgit.target — 包含了目标平台的定义

如果你不幸遇到了missing API baseline相关的错误,目前可以直接忽略掉。(Window > Preferences > Plug-in Development > API Baselines)



运行测试用例

现在可以进行代码编译了,让我们先运行测试程序来验证之前安装是否正确。前面设置好的3个项目都要进行测试。其中org.eclipse.jgit.junit中提供了构建和拆除测试场景的小工具。 org.eclipse.jgit.test 和org.eclipse.jgit.java7.test 中有各自项目所对应的测试用例。除非你没有安装Java7, 否则这3个项目都是要被测试的。

JGit源码中有设置好的运行配置来运行这些测试用例。通过点击“All Tests”的配置项来运行这些用例。“All-External-Tests”除了会运行所有的常规测试用例,目前还会增加一项与本地Git交互的用例。因此,这就要求Git必须预先在本地安装好,并添加到可执行文件的搜索路径中。

如果你发现testMaliciousPathEmpty测试失败,那可能你是在windows上运行,相关帮助请猛击链接bug 396662

核心库的结构

Git 的设计划分为 2 层,分别是 porcelain 层和 plumbing 层。plumbing 层提供了处理底层任务的命令集。在此之上,porcelain 层实现了与用户直接交互的命令集(比如说,checkout,branch,commit等等)。同样的,JGit 也被分为两层。命令 API 仿造了 Git 的命令行,对每一个 Git 动词(commit,branch,checkout等),JGit 在 org.eclipse.jgit.api 包中都提供了一个对应的API。

JGit 使用场景看起来就像是在使用 Git 的 plumbing 层。举例来说,RevWalk 会遍历所有的 commit,并把他们表示成一个 RevCommit。RevCommit 中保存了一个 commit 的元数据。而 TreeWalk 被用来列举一个 commit 中的所有文件,ObjectLoader 可以帮助你读取一个指定的版本(reversion)。

除此之外

核心库已经提供了大多数你所想要的功能,但这可还不是JGit的全部。下面是一组对核心库的扩展插件,它们提供了更为丰富的功能:

  • org.eclipse.jgit.pgm是一个自包含的命令行,它可以执行绝大多数原生Git所提供的命令。

  • 还有不少对AWT和Swing的辅助类被封装在org.eclipse.jgit.ui jar包中,以帮助开发者实现用户名/密码鉴权,以及生成commit的统计图

  • 在 org.eclipse.jgit.ant jar包中还提供了许多Ant tasks (比如说add,checkout,clone,init等)

  • org.eclipse.jgit.archive中有对常见归档格式的封装。可以将commit中的内容转换成不同格式(使用 ArchiveCommand注册)

  • 篇幅所限,最后介绍一下org.eclipse.jgit.http.server,它提供了处理repository access over HTTP的servlet

现在你可以从你的安装中开始浏览JGit的API。 这些 documentation 都是非常基础的,但它们都经过了大量的测试。这些文档是你学习使用JGit API的一个很好的资料来源。 当然你可以从 Stackoverflow以及 JGit Forum或者其他的社区获取到更多的帮助。


本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接。 2KB翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。


2KB项目(www.2kb.com,源码交易平台),提供担保交易、源码交易、虚拟商品、在家创业、在线创业、任务交易、网站设计、软件设计、网络兼职、站长交易、域名交易、链接买卖、网站交易、广告买卖、站长培训、建站美工等服务

  • 全部评论(0)
资讯详情页最新发布上方横幅
最新发布的资讯信息
【计算机/互联网|】Nginx出现502错误(2020-01-20 21:02)
【计算机/互联网|】网站运营全智能软手V0.1版发布(2020-01-20 12:16)
【计算机/互联网|】淘宝这是怎么了?(2020-01-19 19:15)
【行业动态|】谷歌关闭小米智能摄像头,因为窃听器显示了陌生人家中的照片(2020-01-15 09:42)
【行业动态|】据报道谷歌新闻终止了数字杂志,退还主动订阅(2020-01-15 09:39)
【行业动态|】康佳将OLED电视带到美国与LG和索尼竞争(2020-01-15 09:38)
【行业动态|】2020年最佳AV接收机(2020-01-15 09:35)
【行业动态|】2020年最佳流媒体设备:Roku,Apple TV,Firebar,Chromecast等(2020-01-15 09:31)
【行业动态|】CES 2020预览:更多的流媒体服务和订阅即将到来(2020-01-08 21:41)
【行业动态|】从埃隆·马斯克到杰夫·贝佐斯,这30位人物定义了2010年代(2020-01-01 15:14)
联系我们

Q Q: 7090832

电话:400-0011-990

邮箱:7090832@qq.com

时间:9:00-23:00

联系客服
商家入住 服务咨询 投拆建议 联系客服
0577-67068160
手机版

扫一扫进手机版
返回顶部