如何使用git2go/libgit2从blob获取实际文件?
这可能是因为我不知道git在幕后做什么,但我正在尝试使用git2go克隆一个repo,就像您在bash中运行如何使用git2go/libgit2从blob获取实际文件?,go,libgit2,Go,Libgit2,这可能是因为我不知道git在幕后做什么,但我正在尝试使用git2go克隆一个repo,就像您在bash中运行git clone一样。我可以克隆repo以获得repo通常的.git/文件夹的内容。然后我试图从那里得到实际的项目文件。为此,我获取从克隆返回的repo的索引,然后用该索引编写一个树。然后我迷路了,但我现在做的是: type Project struct { conf config.Project State string ABSPath s
git clone
一样。我可以克隆repo以获得repo通常的.git/文件夹的内容。然后我试图从那里得到实际的项目文件。为此,我获取从克隆返回的repo的索引,然后用该索引编写一个树。然后我迷路了,但我现在做的是:
type Project struct {
conf config.Project
State string
ABSPath string
Services map[string]*Service
creds *credentials.RawCredentials
gitCreds *git.Cred
clonePath string
CloneOpts *git.CloneOptions
}
func (p *Project) Unpack(repo *git.Repository) error {
index, indexErr := repo.Index()
if indexErr != nil {
return indexErr
}
log.Println(*index)
oid, writeErr := index.WriteTree()
if writeErr != nil {
return writeErr
}
blob, blobErr := repo.LookupBlob(oid)
if blobErr != nil {
return blobErr
}
content := blob.Contents()
log.Println((string)(content))
return nil
}
目前,内容为空。我在这里的目标是解开整个回购协议。我相信我需要穿过工作树才能做到这一点。我的方向正确吗?当你调用
git.Clone()
时,如果你没有包含&CloneOptions{Bare:true}
,那么你的工作目录应该被填充。你是说git.Clone()
没有将文件写入workdir吗?克隆过程的一部分是初始签出,如果没有发生,那就是一个bug。当调用git.clone()
时,如果没有包含&CloneOptions{Bare:true}
,则应该填充工作目录。比如说“卡洛斯,如果不是,那就是个虫子”。@matt.s是的,你是对的,介意回答一下吗?