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())
}
}