golang如何使用libgit2/git2go

May 14, 2018

libgit2是基于C语言实现的操作git的api,git2go是golang用来调用其api的包,GitHub地址https://github.com/libgit2/git2go,目前也实现了多个语言版本,详见https://libgit2.github.com

环境需求

需要C编译的环境,请确保已安装cmake yum install cmake -y

使用

go get 下载包文件,这个过程比较耗时,需要好几分钟……

go get github.com/libgit2/git2go

下载完成后可能会出现以下报错,即使yum install libgit2安装了libgit2后重新go get仍然会报错,查过其他文章,说是正常情况,呵呵,so,直接忽略吧

# pkg-config --cflags libgit2
Package libgit2 was not found in the pkg-config search path.
Perhaps you should add the directory containing `libgit2.pc'
to the PKG_CONFIG_PATH environment variable
No package 'libgit2' found
pkg-config: exit status 1

开始进行编译

cd $GOPATH/src/github.com/libgit2/git2go
git checkout next
git submodule update --init
make install

包管理

因为需要对git2go进行编译,所以不能像其他的第三方包godep save到vendor目录就完事了。建议将go get下来的代码执行执行git submodule update --init后拷贝到vendor目录下,不要执行make install操作,然后源码目录放一个shell脚本用来做编译操作。这样做的好处是其他同事加入该项目开发时,不需要重新go get和执行git操作,因为真的太耗时了,如下

cd $GOPATH/src/github.com/libgit2/git2go
git checkout next
git submodule update --init
rm -rf .git*
cp $GOPATH/src/github.com/libgit2/git2go $GOPATH/src/myProject/vendor/github.com/libgit2/git2go

编译脚本init.sh

#!/bin/bash
if [ -z $GOPATH ]
then
    echo -e "\$GOPATH is null\n"
    exit 1
fi

cd $GOPATH/src/myProject/vendor/github.com/libgit2/git2go
echo -e "compiling libgit2...\n"
make install

echo -e "compile completed!\n"
exit 0

最后上传到代码管理仓库。

参考

(完)