Прочтите файл после клонирования репозитория с помощью go-git

Я хочу иметь возможность выполнять время выполнения git манипуляции с go.

Я недавно обнаружил go-git пакет, который очень пригодится для этого.

Я также смог выполнить pull операции, более или менее следующие:

import {
  git "gopkg.in/src-d/go-git.v4"
}

repo, err := git.Clone(memory.NewStorage(), nil, &git.CloneOptions{
    URL: "https://github.com/pkaramol/myrepo",
})

err := repo.Pull(&git.PullOptions{
    RemoteName: "origin"
})

Мой вопрос: если я использую проверку репо в памяти, как указано выше), как я смогу читать (мой goпрограмма) файл из репозитория? т.е. предполагая, что файл

https://github.com/pkaramol/myrepo/someConfig.yaml

Было бы предпочтительнее (в случае, если мне нужен только этот конкретный файл) выполнить клонирование git (все еще в памяти) только определенного файла?

1 ответ

Решение

Из документов:

Клонируйте репозиторий в заданную файловую систему Storer и рабочего дерева с заданными параметрами, если рабочее дерево равно нулю, создается пустой репозиторий.

Не передавайте файловую систему nil, если вам нужен доступ к рабочему дереву. Используйте что-нибудь вроде https://godoc.org/gopkg.in/src-d/go-billy.v4/memfs:

package main

import (
    "gopkg.in/src-d/go-git.v4"
    "gopkg.in/src-d/go-git.v4/storage/memory"
    "gopkg.in/src-d/go-billy.v4/memfs"
)

func main() {
    fs := memfs.New()

    repo, err := git.Clone(memory.NewStorage(), fs, &git.CloneOptions{
        URL: "https://github.com/pkaramol/myrepo",
    })

    file, err := fs.Open("someConfig.yaml")
}

Вы не можете клонировать один файл (это не так, как работает git), но вы можете ограничить количество загружаемых коммитов с помощью CloneOptions.Depth.

Другие вопросы по тегам