Sharpen助NGit实现托管Git命令

Git是目前最为流行的分布式版本控制工具,受到全世界开发人员的广泛欢迎。Lluis Sanchez Gual在开发MonoDevelop的Git集成功能时,使用Sharpen将Java实现的JGit转化为C#实现的NGit。Sharpen是一款由Versant公司开发的Eclipse插件,用于将他们的对象数据库产品db4o由Java移植为C#。

Lluis在博客中写到,在实现MonoDevelop的Git功能时,他本打算直接使用Git命令,并解析输出,它可以满足一些基本需求,但很不可靠,只能作为短期解决方案。后来他将注意力转移到GitSharp上。GitSharp是款完全由托管代码实现的.NET类库,实现了绝大部分的Git命令。GitSharp源自JGit的手动移植,因此难以接受JGit的升级与补丁。同时,它还依赖着一些用于实现ssh协议的加密类库,由于输出策略原因,它们不能包含在MonoDevelop中。

因此Lluis尝试了另一种方式,使用Sharpen将JGit的Java代码转化为C#,经过了几个星期的努力,它已经可以自动地将所有JGit代码生成C#代码了,只需少量的手写补丁,十分易于维护。其中大部分的工作是对Sharpen的改进,并实现一些Java核心类库中无法直接对应Mono类库的部分。Lluis表示,目前很容易在JGit和NGit间保持同步,事实上他已经将这一过程使用makefile自动化了。在单元测试方面,NGit已经通过了90%的单元测试,其他失败的10%主要是由于JUnit和NUnit在行为上有所不同,Lluis将继续尝试解决这些问题。在这个过程中还产生了Nsch项目,这是Jsch的对应产物,用于ssh通信,且只依赖于Mono.Security类库。

因此,NGit已经是一个完整的由托管代码实现的客户端了,它不对Mono外的类库有任何依赖。包括单元测试在内,转换后大约有56000行C#代码,目前已经可以在Github上访问了。Lluis目前的工作,是继续实现MonoDevelop中对Git的支持插件,他表示已经完成了大部分实现,还需一些测试,并解决一些性能问题即可提交至master分支中。他同时也提交了一些JGit的补丁,已被部分接受。

Sharpen项目原本是由Versant公司开发,用于将他们的开源对象数据库产品db4o从Java移植到C#。Sharpen支持自定义转化规则,并可以保留.NET的习惯,例如将特定方法转化为属性或是事件。在Sharpen的帮助下,他们已经同时提供db4o在两种平台上的原生实现。

除了Sharpen之外,IKVM.NET也是一个在.NET环境下运行Java程序的项目。与Sharpen的源码转化不同,IKVM.NET的手段主要是将Java字节码转化为.NET IL,并提供了一套JDK核心类库的.NET实现。IKVM.NET支持微软.NET平台及Mono,并可以成功运行包括Eclipse、Jython、JBoss在内的大型Java应用程序。国内社区的老赵也分享了他基于IKVM.NET使用Lucene 2.9.0及Google Closure Compiler的经验。

你可能感兴趣的:(Sharpen助NGit实现托管Git命令)