2016-04-21 121 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},那麼應該填寫您的工作目錄。

相關問題