1

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 clone (まだ mem 内) を実行する方が望ましいでしょうか (この特定のファイルだけが必要な場合) 。

4

1 に答える 1

4

ドキュメントから

worktreeが nil の場合、ベア リポジトリが作成されます。

ワークツリーにアクセスしたい場合は、nil ファイルシステムを渡さないでください。gopkg.in/src-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を使用してダウンロードされるコミットの数を制限できます。

于 2020-02-05T18:34:10.183 に答える