在 JavaGit、JGit 和 EGit 之间选择的困惑

Posted

技术标签:

【中文标题】在 JavaGit、JGit 和 EGit 之间选择的困惑【英文标题】:Confusion in choosing between JavaGit, JGit and EGit 【发布时间】:2011-07-17 04:30:08 【问题描述】:

我正在制作一个使用 Git 的 Java 应用程序。我发现有一个东西叫 JavaGit、EGit 和 JGit。

我知道 JavaGit 和 EGit/JGit 是不同的。我不明白的是EGit和JGit之间的区别。两者都托管在 Eclipse 项目上,但一个似乎与 Eclipse 相关,而另一个则不是。

我不使用 Eclipse,也不打算使用,所以我真的不太关心“Eclipse 集成”。

JGit 是否以某种方式连接到 Eclipse? (托管在www.eclipse.org,JGit的documentation里面也有很多“eclipse”关键字)

在这三个中,我需要什么来连接我的 Java 程序(不是用 Eclipse 编写的)以使用 Git 存储库?

我更喜欢独立的 Git 库(即,不依赖于本地 Git 安装)

编辑:还有一个问题:

JGit 是否支持Git bundle command?

编辑:我找到了答案——确实如此(还没有尝试过)。它位于transport 包中的一个名为BundleWriter 的类中

【问题讨论】:

【参考方案1】:

您可以将 JGit 用作独立库,但是,正如 JGit Homepage 中所述:

JGit 可以在以下位置找到: * EGit,Git 的 Eclipse 团队提供者

从这个意义上说,JGit 与 Eclipse 相连,因为 EGit 使用 JGit 特性来开发 Eclipse Git 插件。 考虑到所有 Eclipse 项目现在都在 Git 存储库中进行版本控制(而不是以前的 CVS 存储库),我会考虑将 JGit 用于您的 Java 项目,因为它似乎是:

JavaGit 很长一段时间没有更新(2008 年) Eclipse 致力于通过 EGit 为 Git 提供良好的支持,这将通过扩展来确保 JGit(由 EGit 使用)的开发。

Thorbjørn Ravn Andersencmets:

尽管你说 Egit 使用 JGit,但在上面并不清楚 EGit 是一个 Eclipse 插件,它提供 git 支持,就像 Eclipse 已经支持 CVS 一样

Eclipse 项目from CVS to Git is in progress 和has been reported here 的迁移(作者:Chris Aniszczyk)。

我在几个项目的开发列表中监控了有关将项目代码从 CVS 迁移到 Git 的对话。 大多数开发人员似乎都理解迁移的价值主张,尽管他们担心迁移会带来很多新的学习,因为他们知道如何在新环境中说高效。

不可避免地,关于由 EGit 项目开发的 Git 团队提供者的讨论成为谈话的重要部分。 “EGit 准备好迎接黄金时段了吗?”经常是反复出现的问题

官方错误说明了 Eclipse 承诺为现在 Git 存储库上的所有 Eclipse 项目提供“充分的工具支持”是bug 293192。

为了弃用旧的 VCS 以支持 git (bug 270854),需要足够的工具 应该可用。创建此错误是为了跟踪它。 [...] 我打开/链接了相关的 EGit 错误,以便获得更好的可见性/跟踪 缺少什么。

因此,Egit 是该错误中引用的唯一项目,可为所有 Eclipse 项目选择的新 (D)VCS 提供足够的工具支持。

(bug 270854 是关于弃用旧的 VCS 工具,其中主要包括 CVS。)


就在(2001 年 3 月 17 日):The State of Git at Eclipse – Early 2011 (Chris Aniszczyk):

我很高兴根据 Eclipse Marketplace 统计数据和项目收到的社区贡献,自去年以来事情已经取得了长足的进步。

那么接下来呢?在工具方面,我们正在接近 1.0 版本(计划在 Indigo 版本中发布)。 Eclipse 的 git 工具现在好多了,如果您需要帮助或有问题,请从最优秀的 EGit User Guide 开始。

如果您是 eclipse.org 项目,请考虑开始将您的项目存储库移动到 Git 的过程。 There are a lot of eclipse.org projects already on Git。 很高兴看到所有 eclipse.org 项目都计划在 Indigo 版本之前迁移到 Git。

【讨论】:

尽管你说 Egit 使用 JGit,但在上面并不太清楚 EGit 是一个 Eclipse 插件,它提供了 git 支持,就像 Eclipse 已经支持 CVS 一样。跨度> 所以仅仅因为它托管在 eclipse.org 上并不意味着它与 Eclipse 有关系? @Jus12 @Thorbjørn:我添加了一些元素来说明 Egit 在 Eclipse 项目中的作用。 我同意 JavaGit 已经很老了,我只是在看它以防 JGit 太复杂而无法使用。 @Jus12:Jetty HTTP 服务器现在也托管在 Eclipse.org (eclipse.org/jetty) 上,它与 Eclipse IDE 本身无关。 Jetty 可以独立使用,也可以嵌入到其他与 Eclipse 无关的项目中。【参考方案2】:

作为 JGit 和 EGit 的作者之一,很抱歉造成混淆。

JGit 是一个 EDL(新型 BSD)许可的轻量级纯 Java 库,实现了 Git 版本控制系统。它可以独立使用,并嵌入到 Gerrit、Eclipse、Netbeans 和 IntelliJ 等应用程序中。 EGit 嵌入 JGit 以使用它来处理 Git 存储库并从 Eclipse 中公开 Git 结构。目前,JGit 不支持 git-bundle 命令,但欢迎您提供支持,这应该不难,请参阅我们的贡献者指南。

【讨论】:

【参考方案3】:

只是插话,因为我刚刚偶然发现了这个问题。

Eclipse Foundation 和 Eclipse IDE 之间存在差异。基金会是伞形组织,而 IDE 是通过基金会开发的项目之一。因此,重要的是要知道,正如 Apache 从 Web 服务器开始并扩展为托管多个项目的基金会一样,Eclipse 基金会现在也已扩展到其在 IDE 中的“根”之外。

因此在这种情况下,JGit 代码为 git 命令提供了 Java API,而 EGit 使用 JGit 为 Eclipse IDE 提供 git 支持。

就个人而言,我有时也觉得这有点令人困惑,有时似乎有这么多事情在某些方面降低了这些组织的关注度;但是,我也可以看到拥有一个伞形组织而不是 20 个相似但不同的组织的效用。

【讨论】:

【参考方案4】:

JGit 是作为 Java 库从头开始实现的 git,而 JavaGit 是(曾经?)一个包装原生 git 实现的 Java API(即它正在调用原生 git 命令行)。

EGit 是将 JGit 集成到 Eclipse IDE 中的 Git Eclipse Team Provider,它提供了在 Eclipse 内部与 Git 一起使用的 UI。

与此同时,Eclipse 社区的很大一部分以及大量的企业开发人员都在使用 EGit/JGit(这就是支持这些项目的公司投入资金的原因)。如果您想了解贡献者,请查看项目页面([1]、[2])和ohloh。

【讨论】:

【参考方案5】:

JGit 是一个用于操作 git 存储库的库。你不要单独使用 JGit,除非你编写一个程序以你喜欢的方式操作 git 存储库。

如果您使用 Eclipse 作为 IDE,则将 EGit 安装为版本控制插件(在 Indigo 中默认设置)。 EGit 调用 JGit,所以如果你安装了 EGit,你也安装了 JGit。

注意,对于 Netbeans,您将 NBGit 安装为版本控制插件。 NBGit 也调用 JGit。

JavaGit:没有积极维护?

【讨论】:

【参考方案6】:

JGit 是 Git 的 Java 实现。它是一个库,也可以在您自己的应用程序中使用。它还提供了某种 CLI 操作。 另一边的 EGit 是 Git 的 Eclipse 团队提供者插件,它使用 JGit 作为 Git 实现。简而言之,您可以说 EGit 是 UI 部分,而 JGit 是背景部分。 JGit 不依赖于 EGit,但 EGit 确实依赖于 JGit。

发件人:https://www.eclipse.org/forums/index.php/t/273443/

【讨论】:

以上是关于在 JavaGit、JGit 和 EGit 之间选择的困惑的主要内容,如果未能解决你的问题,请参考以下文章

在 Eclipse git 中使用本机 git 而不是 jgit?

Egit 钩子不会被触发

如何在Eclipse插件中为git设置TemplateDir值?

通过eclipse的egit插件提交提示Auth fail

如何在与 JGit 合并之前获得冲突?

从零开始JavaGit和svn