func ExtractTree(repo git.Repo, branch, build_dir string) error { // resolve branch hash, err := repo.ReadRef(branch) if err != nil { return err } if _, err := os.Stat(build_dir); os.IsNotExist(err) { os.MkdirAll(build_dir, 0777) } // read commit object and extract tree id from it _, obj, err := repo.OpenObject(hash) if err != nil { return err } defer obj.Close() commit, err := git.ReadCommit(obj) if err != nil { return err } treeId := commit.TreeId // read root tree object _, treeObj, err := repo.OpenObject(treeId) if err != nil { return err } defer treeObj.Close() root, err := git.ReadTree(treeObj) if err != nil { return err } // traverse tree from root and extract content into given directory err = traverseExtractTree(repo, root, build_dir) if err != nil { return err } return nil }