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

86
我正在制作一个使用Git的Java应用程序。我发现有一些东西叫做JavaGitEGitJGit
我知道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
编辑:我找到了答案--它支持(尚未尝试)。它在名为BundleWriter的类的transport包中。
6个回答

60

您可以将JGit用作独立库,但是如JGit主页所述:

JGit可在以下位置找到:
* EGit,Eclipse Git小组提供者

从这个意义上讲,JGit与Eclipse相关,因为EGit使用JGit功能来开发Eclipse Git插件。
考虑到现在所有的Eclipse项目都是在Git存储库中进行版本控制(而不是之前的CVS存储库),我认为对于您的Java项目,应该考虑使用JGit,因为看起来:

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

Thorbjørn Ravn Andersen 评论道:

尽管您说Egit使用JGit,但以上内容并不清楚,Egit是一个Eclipse插件,为Git提供与CVS相同的支持。

Eclipse项目从CVS迁移到Git 正在进行中由Chris Aniszczyk在此处报道

我已经监控了几个项目的dev-lists上有关从CVS迁移到Git的项目代码的讨论。
大多数开发人员似乎都理解迁移的价值主张,尽管他们担心随着迁移带来了许多新的学习,他们将如何在新环境中保持高效。

不可避免地,有关由Egit项目开发的Git团队提供程序的讨论成为谈话的重要部分。 “Egit是否准备好了?”是经常被提出的问题。

官方错误显示Eclipse承诺为所有现在在Git存储库上的Eclipse项目提供“足够的工具支持”,即错误293192

为了废弃旧的版本控制系统并支持Git (bug 270854),应提供足够的工具。创建此错误以跟踪这一点。
[...] 我打开/链接相关的EGit错误,以便更好地看到/跟踪缺少什么。

因此,在该错误中引用Egit是唯一提供新(D)VCS所选的充分工具支持的项目。

(bug 270854是关于废除旧的VCS工具,其中包括基本上是CVS.)


最新消息(2011年3月17日):Eclipse中Git的现状——2011年早期Chris Aniszczyk):

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

EGit installation rate

所以下一步是什么?就工具而言,我们正在接近发布1.0版(计划在Indigo版本中发布)。 如今Eclipse的Git工具更好了,如果需要帮助或有问题,请首先查阅EGit用户指南。 如果您是eclipse.org项目,请考虑开始将您的项目存储库迁移到Git的流程。 已经有很多eclipse.org项目使用Git了。 希望看到所有的eclipse.org项目都有计划在Indigo版本之前转移到Git。

尽管你说Egit使用JGit,但以上内容并不十分清楚,Egit是一个Eclipse插件,为git提供支持,就像CVS已经在Eclipse中得到支持一样。 - Thorbjørn Ravn Andersen
仅仅因为它托管在eclipse.org上,并不意味着它与Eclipse有任何关系,对吗? - Jus12
@Jus12 @Thorbjørn:我已经添加了一些元素来说明Egit在Eclipse项目中的作用。 - VonC
我同意JavaGit相当老旧,我只是在考虑万一JGit使用起来太复杂了。 - Jus12
1
@Jus12: Jetty HTTP 服务器现在也托管在 Eclipse.org 上(http://www.eclipse.org/jetty/),它与 Eclipse IDE 本身无关。Jetty 可以作为独立使用,也可以嵌入到其他非 Eclipse 相关的项目中。 - Peter Štibraný
@Peter Stibrany,感谢您的澄清。实际上,这是关于JGit最令人困惑的部分。直觉上,如果它托管在eclipse.org上,它必须与Eclipse有关 :-)也许他们应该考虑改名。我看不出这里的合理性。 - Jus12

47

作为JGit和EGit的作者之一,对于造成的困惑感到抱歉。

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


4
只是想插话一下,因为我刚刚偶然发现了这个问题。Eclipse基金会和Eclipse IDE之间有所不同。基金会是伞形组织,而IDE是通过基金会开发的项目之一。所以,重要的是要知道,就像Apache从Web服务器开始分支出去成为一个基金会托管许多项目一样,Eclipse基金会现在已经超越了其在IDE中的“根源”。因此,在这种情况下,JGit代码提供了git命令的Java API,而EGit使用JGit为Eclipse IDE提供git支持。
个人而言,有时我也觉得这有点令人困惑,有时几乎似乎这么多事情正在某种程度上降低这些组织的重心;但是,我也能看到拥有一个伞形组织的实用性,而不是20个类似但不同的组织。

3

JGit是一个完全用Java实现的git库,而JavaGit是(过去?)调用本地git实现的Java API(即它在调用本地git命令行)。

EGit是将JGit集成到Eclipse IDE中的Git Eclipse团队提供程序,并提供UI以从Eclipse内部使用Git。

与此同时,Eclipse社区的大部分人和许多企业开发者正在使用EGit/JGit(这就是支持这些项目的公司投入资金的原因)。如果您想了解贡献者是谁,请参阅项目页面([1][2])和ohloh


0
JGit是Git的Java实现。它是一个库,也可以用于您自己的应用程序。它还提供了一些CLI操作。
另一方面,EGit是Git的Eclipse团队提供者插件,它使用JGit作为Git实现。简单地说,EGit是UI部分,而JGit是后台部分。
JGit不依赖于EGit,但EGit依赖于JGit。

0

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

如果您使用Eclipse作为IDE,则安装EGit作为版本控制插件(在Indigo中默认安装)。 EGit调用JGit,因此如果您安装EGit,则还安装了JGit。

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

JavaGit:没有积极维护吗?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接