Прочитать файл после клонирования репозитория с go - git - PullRequest
0 голосов
/ 05 февраля 2020

Я хочу иметь возможность выполнять 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 Ответ

2 голосов
/ 05 февраля 2020

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

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

Не передавайте файловую систему nil, если вы хотите получить доступ к рабочему дереву. Используйте что-то вроде gopkg.in / sr c -d / go -billy.v4 / memfs.Memory :

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 .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...