go-git是一个纯Go语言实现的、高扩展性的Git包。

当然,上面这个只是官方的介绍而已。我这里并不是来广告这个包的,而是介绍一个简单的需求的实现范例,这个需求就是:

将一个git仓库clone到内存中,并获取工作区的内容(文件、目录)

go-git官方库里有很多范例,但是很多都语焉不详,所以才有此文。直接看代码里的注释:

package main

import(
	"fmt"
	"os"

	"gopkg.in/src-d/go-billy.v3/memfs"
	"gopkg.in/src-d/go-git.v4"
	"gopkg.in/src-d/go-git.v4/storage/memory"
)

func main(){
	//创建基于内存的文件系统,主要用于保存Git的工作区
	fs := memfs.New()

	//创建基于内存的存储系统,主要用于保存Git的Meta信息(.git中的内容)
	storage := memory.NewStorage()

	//Clone仓库
	cloneOption,_ := &git.CloneOptions{URL: "http://github.com/src-d/go-git.v4", Progress: os.Stdout}

	//读取工作区内容
	//具体接口可以参考gopkg.in/src-d/go-billy.v3/memfs里的Memory接口。
	fileInfos,_ := fs.ReadDir("/")

	for _, fileInfo := range fileInfos {
		fmt.Println(fileInfo.Name())
	}

}