Как получить настоящий файл из блоба с помощью git2go/libgit2?

Так что это может быть связано с моим незнанием того, что git делает под капотом, но я пытаюсь клонировать репо с помощью git2go, как если бы вы запускали git clone <repo url> в bash. Я могу клонировать репо, чтобы получить содержимое обычных репозиториев .git/folder. Затем я пытаюсь получить оттуда фактические файлы проекта. Для этого я получаю индекс репо, возвращенный из клона, затем пишу дерево с этим индексом. Потом я теряюсь, но вот что я сейчас делаю:

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
}

В настоящее время содержимое пусто. Моя цель здесь - распаковать весь репо. Я считаю, что мне нужно пройти через рабочее дерево, чтобы сделать это. Я иду в правильном направлении?


person Christian Grabowski    schedule 21.04.2016    source источник
comment
Вы говорите, что git.Clone() не записывает файлы в рабочий каталог? Частью процесса клонирования является начальная проверка, если этого не происходит, это ошибка.   -  person Carlos Martín Nieto    schedule 21.04.2016
comment
Когда вы вызвали git.Clone(), если вы не включили &CloneOptions{Bare:true}, ваш рабочий каталог должен быть заполнен. Как @Carlos, если нет, то это ошибка.   -  person matt.s    schedule 21.04.2016
comment
@matt.s да, ты прав, не мог бы сделать это ответом?   -  person Christian Grabowski    schedule 21.04.2016


Ответы (1)


Когда вы вызываете git.Clone(), если вы не включаете &CloneOptions{Bare:true}, ваш рабочий каталог должен быть заполнен.

person matt.s    schedule 21.04.2016