使用git2go在Go中镜像git repo

时间:2016-02-09 22:38:22

标签: git go libgit2

我试图将git repo镜像为go服务正在进行的一些工作的一部分。我假设我想使用git2go,但我并没有这样做;任何解决方案都可以。

我想要完成的工作流程(在bash中实现)是:

git clone --bare git:github.com/foo/bar.git ./tmp/
cd ./tmp/
git push --mirror git:another-host/vendor/bar.git

这是我到目前为止所拥有的:

main.go

package main

import (
        "log"

        git "gopkg.in/libgit2/git2go.v22"
)

func main() {
        src := "git://github.com/fliglio/web.git"
        dest := "http://foo:asdf@localhost:7990/scm/phpv/web.git"

        cloneOptions := &git.CloneOptions{
                Bare: true,
        }
        repo, err := git.Clone(src, "local", cloneOptions)
        if err != nil {
                log.Panic(err)
        }
        log.Print(repo)

        fork, err := repo.CreateRemote("upstream", dest)
        if err != nil {
                panic(err)
        }

        refspecs, err := fork.FetchRefspecs()
        if err != nil {
                panic(err)
        }
        err = fork.Push(refspecs, &git.PushOptions{}, &git.Signature{Name: "ben", Email: "benschw@gmail.com"}, "msg")
        if err != nil {
                panic(err)
        }

}

这是克隆裸仓库的罚款,但我认为我可能会向错误的方向前进,将其推向新的位置

以下是运行时的输出:

17:02:12 &{0x2655b50}
panic: Not a valid reference 'refs/heads/*'

goroutine 1 [running]:
main.main()
        /home/ben/go/src/github.com/benschw/composer-sync/main.go:33  +0x47a

goroutine 17 [syscall, locked to thread]:
runtime.goexit()
        /opt/go1.5.2/src/runtime/asm_amd64.s:1721 +0x1

0 个答案:

没有答案