我希望能够使用go
执行运行时的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"
})
我的问题是,假设我使用的是上述回购的内存中签出),我如何能够从存储库中读取(我的go
程序)的文件?即假设文件
https://github.com/pkaramol/myrepo/someConfig.yaml
如果我需要只是这个特定的文件,那么执行的git克隆(仍然在mem中)是否更可取?
发布于 2020-02-05 18:34:10
使用给定的选项将存储库克隆到给定的Storer和worktree文件系统中,如果工作树为0,则创建一个空的存储库。
如果希望访问工作树,请不要传递零文件系统。使用类似于Gopkg.in/src/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")
}
您不能克隆单个文件(这不是git的工作方式),但是可以限制使用CloneOptions.Depth下载的提交数量。
https://stackoverflow.com/questions/60080923
复制相似问题