這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
最近研究用go語言操作git,除了直接走命令列用os/exec
包,還可以使用libgit2
的go綁定git2go
操作。
但是libgit2
是c語言庫,go使用cgo
串連c程式,需要cgo
的支援。總之過程複雜,摔了一路。
安裝 gcc 和 pkg-config
首先是安裝gcc
和pkg-config
(cgo依賴)。gcc編譯器推薦用TDM-GCC來直接安裝,方便快捷,注意不要用綠色版用安裝版。pkg-config
可以再gnome的官方庫中找到。pkg-config
安裝需要同時下載:
http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/pkg-config_0.26-1_win32.ziphttp://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/gettext-runtime_0.18.1.1-2_win32.ziphttp://ftp.gnome.org/pub/gnome/binaries/win32/glib/2.28/glib_2.28.8-1_win32.zip
把幾個zip包中bin目錄的所有exe和dll拷貝到gcc的bin目錄。
gcc 編譯 libgit2
libgit2 是Git核心開發包的純c實現,可以很容易移植和嵌入到別的應用中。官網也提供的它和各種語言的綁定,比如Go語言的git2go。
在Mac上golang編譯git2go很容易:
brew install libgit2go get github.com/libgit2/git2go
不過因為git2go和對應的libgit2進度不同,Windows編譯的時候問題不斷。
直接git clone最新的libgit2代碼(錯誤的),使用cmake編譯。具體方法在官方wiki Building libgit2 on Windows 已經寫清楚,照著來就行。唯一注意,把編譯參數中的 BUILD_CLAR
關閉,就可以不依賴python。還有,使用文檔最後的參數:
cmake . -DCMAKE_INSTALL_PREFIX=C:\libgit2
編譯到目錄名沒有空格的目錄,否則git2go的wrapper.c會解析地址錯誤。建議用cmake-gui
查看並設定編譯參數。按照wiki編譯:
cmake --build .. --target install
編譯完成,將C:/libgit2/lib/pkgconfig添加到系統變數PKG_CONFIG_PATH
,讓pkg-config
可以找到libgit2.pc檔案。
之後就可以 go get啦。
但是
後來在Github項目的Pull#53發現,最新的libgit2更新了API破壞了git2go。最終求助mac的同學,查到brew提供的編譯好的是0.20版本,就去下載 release 0.20.0。
golang 編譯 git2go
git2go的編譯唯一需要注意就是,將C:/libgit2/lib/pkgconfig添加到系統變數PKG_CONFIG_PATH
,讓cgo可以訪問到.pc檔案,讀取庫相關資訊。剩下就是 go get 或者 go install。
個站地址:http://fuxiaohei.me/article/14/windows-git2go.html