1
所以这可能是由于我对引擎盖下的git无知,但我试图使用git2go克隆一个回购,就像在bash中运行git clone <repo url>
一样。我可以克隆回购得到通常的.git /文件夹回购的内容。然后我试图从那里获取实际的项目文件。为此,我得到从克隆中返回的repo索引,然后编写一个具有该索引的树。然后我迷路了,但这是我目前正在做的:如何使用git2go/libgit2从blob获取实际文件?
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()'不是将文件写入工作目录吗?部分克隆过程是初始结账,如果没有发生,那就是一个错误。 –
当你调用'git.Clone()'时,如果你没有包含'&CloneOptions {Bare:true}',那么你的工作目录应该被填充。就像@Carlos,如果不是的话,那就是一个错误。 –
@ matt.s yup,你是对的,介意做出答案? –