JGit 是一个纯Java类库,实现了Git版本控制系统。它是一个Eclipse项目,最初是由作为Git库的Egit起始的,提供了将Git集成到Eclipse中的功能。同时JGit进一步被 Gerrit,GitBlit 以及 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下面的几个项目:
如果你不幸遇到了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的全部。下面是一组对核心库的扩展插件,它们提供了更为丰富的功能:
现在你可以从你的安装中开始浏览JGit的API。 这些 documentation 都是非常基础的,但它们都经过了大量的测试。这些文档是你学习使用JGit API的一个很好的资料来源。 当然你可以从 Stackoverflow以及 JGit Forum或者其他的社区获取到更多的帮助。
|