最近研究用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。