2016-04-21 120 views
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 
} 

目前,内容为空。我的目标是解压整个回购。我相信我需要穿过工作树才能做到这一点。我是否朝着正确的方向前进?

+1

你是说'git.Clone()'不是将文件写入工作目录吗?部分克隆过程是初始结账,如果没有发生,那就是一个错误。 –

+0

当你调用'git.Clone()'时,如果你没有包含'&CloneOptions {Bare:true}',那么你的工作目录应该被填充。就像@Carlos,如果不是的话,那就是一个错误。 –

+0

@ matt.s yup,你是对的,介意做出答案? –

回答

2

当您拨打git.Clone()时,如果您不包含&CloneOptions{Bare:true},那么应该填写您的工作目录。

相关问题