Прочтите файл после клонирования репозитория с помощью 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.