使用go-git
将特定单个本地分支推送到特定远程分支的规范方法是什么?
我使用go-git
checkout 并打开了一个本地存储库
repo, err := git.PlainOpen("my-repo")
存储库具有默认的origin
远程。
我正尝试将此存储库的内容同步到另一个远程mirror
,因此我添加了远程
repo.CreateRemote(&config.RemoteConfig{
Name: "mirror",
URLs: []string{"git@github.com:foo/mirror.git"},
})
首先,我从origin
获取存储库内容
err = remote.Fetch(&git.FetchOptions{
RemoteName: "origin",
Tags: git.AllTags,
})
...并使用remote.List()
发现所有感兴趣的分支和标记
最后一步是将分支推送到mirror
,同时基于Map重写分支名称。例如,refs/remotes/origin/master
checkout 为refs/heads/master
,应推送到mirror
remote为main
。因此,我正在迭代分支并尝试逐个推送:
refSpec := config.RefSpec(fmt.Sprintf(
"+%s:refs/remotes/mirror/%s",
localBranch.Name().String(),
// map branch names, e.g. master -> main
mapBranch(remoteBranch.Name().Short()),
))
err = repo.Push(&git.PushOptions{
RemoteName: "mirror",
Force: true,
RefSpecs: []config.RefSpec{refSpec},
Atomic: true,
})
但这会导致git.NoErrAlreadyUpToDate
,并且mirror
遥控器上没有任何事情发生。
1条答案
按热度按时间2guxujil1#
refSpec
在将单个分支推送到远程时,NOT的格式应为+refs/heads/localBranchName:refs/remotes/remoteName/remoteBranchName
,如下所示:而是作为
。请参阅示例: