写点什么

Sharpen 助 NGit 实现托管 Git 命令

  • 2010-11-03
  • 本文字数:1137 字

    阅读完需:约 4 分钟

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 的经验。

2010-11-03 08:052031
用户头像

发布了 157 篇内容, 共 59.1 次阅读, 收获喜欢 6 次。

关注

评论

发布
暂无评论
发现更多内容

PyTorch中 torch.nn与torch.nn.functional的区别

Geek_7ubdnf

Python PyTorch

I see you!「2022 龙蜥社区优秀贡献者」正式启动

OpenAnolis小助手

开源 龙蜥社区 2022 奖项 优秀贡献者

Python将图片输出为二维数组并保存到txt中

Geek_7ubdnf

Python

堆叠降噪自动编码器 Stacked Denoising Auto Encoder(SDAE)

Geek_7ubdnf

图像处理

未来软件开发主流模式——低代码开发

力软低代码开发平台

PyTorch的简单实现

Geek_7ubdnf

Python PyTorch

软件测试/测试开发丨如何从 0 开始学 Python 自动化测试开发(一)

测试人

Python 软件测试 自动化测试 测试开发

房价危机:疫情后时代席卷全球的新变局|数据报告

前嗅大数据

数据分析 数据采集 爬虫案例 爬虫工具 房价

Python中LSTM回归神经网络的时间序列预测

Geek_7ubdnf

Python

无需服务器开发,实现设备状态缓存方案——实践类

阿里云AIoT

sql 缓存 运维 物联网 存储

小令观点 | 个人信息泄露——当代数字身份之殇

令牌云数字身份

数字身份 信息泄露 身份

RPN:Region Proposal Networks (区域候选网络)

Geek_7ubdnf

图像处理

稳扎稳打,坚定前行 | 一文带你回顾 StoneDB 的 2022 年

StoneDB

MySQL 数据库 HTAP StoneDB 企业号 1 月 PK 榜

带你来吃瓜!Andy Pavlo教授带您一文回顾数据库的2022年

StoneDB

MySQL 数据库 HTAP StoneDB 企业号 1 月 PK 榜

Python对txt进行读写操作

Geek_7ubdnf

Python

深圳大数据程序员培训多长时间可以找工作

小谷哥

创建Root权限虚拟环境

Geek_7ubdnf

Linux

极光笔记 | 如何为 iOS 16 创建一个实时活动

极光GPTBots-极光推送

ios 开发者 运营 API

如何通过Java应用程序添加或删除 PDF 中的附件

在下毛毛雨

PDF Java’ 添加注释

尚硅谷Filebeat视频教程发布

小谷哥

pip安装更换镜像

Geek_7ubdnf

Python.

高性能网络SIG月度动态:virtio新设备进入virtio规范、smc新特性IPC性能比tcp提升88% | 龙蜥SIG

OpenAnolis小助手

操作系统 高性能网络 龙蜥社区 sig virtio

PyTorch中 nn.Conv2d与nn.ConvTranspose2d函数的用法

Geek_7ubdnf

Python PyTorch

为什么 APISIX Ingress 是比 Ingress NGINX 更好的选择?

API7.ai 技术团队

APISIX Ingress Controller Kubernetes Serverless NGINX Ingress Controller

TiDB 底层存储结构 LSM 树原理介绍

C++后台开发

数据结构 后端开发 LSM树 TiDB

这可能是Feign调用可重试的最佳方案了

JAVA旭阳

Java spring

Python将二维数组输出为图片

Geek_7ubdnf

Python

软件测试/测试开发丨从 0 开始学 Python 自动化测试开发(二):环境搭建

测试人

Python 软件测试 自动化测试 测试开发

上海前端培训课程哪家的好

小谷哥

啥玩意儿?一个计时模块要做2天?

为自己带盐

dotnetcore

Sharpen助NGit实现托管Git命令_.NET_赵劼_InfoQ精选文章