我试图将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