几年前,我和我的团队,我们在Go中编写了一个纯粹的git实现,它避免了任何c/c ++依赖,并使其更灵活,更容易扩展.
https://github.com/src-d/go-git
go-git旨在达到libgit2或jgit的完整性,现在涵盖了大部分的管道读取操作和一些主要的写操作,但缺乏主要的瓷器操作,如合并.
Victor提出的确实是开发人员设想的"编写"Git"官方"方式.Git的命令分为两大类,专门用于此目的:"管道"命令是低级的,并且主要用于其他程序; "瓷器"命令旨在与用户交互,并调用管道命令来完成他们的工作.查看/usr/lib/git-core目录(可能在您的系统上可能不同)以了解Git有多少管道命令.
另一方面,Go支持通过其cgo工具链接共享库.你因此可以试着libgit2用它包装.AFAIK libgit2还没有完全与Git本身相提并论,但它能够读/写Git存储库,进行分支等 - 据说它足以完成你的任务.
好吧,在我写完所有内容后,我向下滚动了网站上的"Bindings"条目libgit2,发现go-git......