最近研究用go语言操做git,除了直接走命令行用os/exec
包,还能够使用libgit2
的go绑定git2go
操做。 可是libgit2
是c语言库,go使用cgo
链接c程序,须要cgo
的支持。总之过程复杂,摔了一路。<!--more-->html
首先是安装gcc
和pkg-config
(cgo依赖)。gcc编译器推荐用TDM-GCC来直接安装,方便快捷,注意不要用绿色版用安装版。pkg-config
能够再gnome的官方库中找到。pkg-config
安装须要同时下载:python
http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/pkg-config_0.26-1_win32.zip http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/gettext-runtime_0.18.1.1-2_win32.zip http://ftp.gnome.org/pub/gnome/binaries/win32/glib/2.28/glib_2.28.8-1_win32.zip
把几个zip包中bin目录的全部exe和dll拷贝到gcc的bin目录。git
libgit2 是Git核心开发包的纯c实现,能够很容易移植和嵌入到别的应用中。官网也提供的它和各类语言的绑定,好比Go语言的git2go。github
在Mac上golang编译git2go很容易:golang
brew install libgit2 go get github.com/libgit2/git2go
不过由于git2go和对应的libgit2进度不一样,Windows编译的时候问题不断。windows
直接git clone最新的libgit2代码(错误的),使用cmake编译。具体方法在官方wiki Building libgit2 on Windows 已经写清楚,照着来就行。惟一注意,把编译参数中的 BUILD_CLAR
关闭,就能够不依赖python。还有,使用文档最后的参数:app
cmake . -DCMAKE_INSTALL_PREFIX=C:\libgit2
编译到目录名没有空格的目录,不然git2go的wrapper.c会解析地址错误。建议用cmake-gui
查看并设置编译参数。按照wiki编译:ui
cmake --build .. --target install
编译完成,将C:/libgit2/lib/pkgconfig添加到系统变量PKG_CONFIG_PATH
,让pkg-config
能够找到libgit2.pc文件。.net
以后就能够 go get啦。命令行
后来在Github项目的Pull#53发现,最新的libgit2更新了API破坏了git2go。最终求助mac的同窗,查到brew提供的编译好的是0.20版本,就去下载 release 0.20.0。
git2go的编译惟一须要注意就是,将C:/libgit2/lib/pkgconfig添加到系统变量PKG_CONFIG_PATH
,让cgo能够访问到.pc文件,读取库相关信息。剩下就是 go get 或者 go install。