我希望能够git使用go.
我最近发现了一个go-git非常方便的软件包。
我还能够执行pull操作,或多或少如下:
import {
git "gopkg.in/src-d/go-git.v4"
}
repo, err := git.Clone(memory.NewStorage(), nil, &git.CloneOptions{
URL: "https://github.com/pkaramol/myrepo",
})
err := repo.Pull(&git.PullOptions{
RemoteName: "origin"
})
Run Code Online (Sandbox Code Playgroud)
我的问题是,假设我正在使用存储库的内存中签出(如上所述),我将如何go从存储库中读入(我的程序)文件?即假设文件
https://github.com/pkaramol/myrepo/someConfig.yaml
Run Code Online (Sandbox Code Playgroud)
是否最好(如果我只需要这个特定文件)仅对特定文件执行 git 克隆(仍在内存中) ?
来自文档:
使用给定选项将存储库克隆到给定的存储库和工作树文件系统中,如果工作树为 nil,则创建裸存储库。
如果您想访问工作树,请不要传递 nil 文件系统。使用类似gopkg.in/src-d/go-billy.v4/memfs.Memory的东西:
package main
import (
"gopkg.in/src-d/go-git.v4"
"gopkg.in/src-d/go-git.v4/storage/memory"
"gopkg.in/src-d/go-billy.v4/memfs"
)
func main() {
fs := memfs.New()
repo, err := git.Clone(memory.NewStorage(), fs, &git.CloneOptions{
URL: "https://github.com/pkaramol/myrepo",
})
file, err := fs.Open("someConfig.yaml")
}
Run Code Online (Sandbox Code Playgroud)
您无法克隆单个文件(这不是 git 的工作方式),但您可以使用CloneOptions.Depth限制下载的提交数量。