使用 git2go 从远程执行 git fetch && git 合并

Doing git fetch && git merge from remote with git2go

我正在使用 libgit2/git2go v0.22 并尝试从远程存储库实现类似于 "git pull" 的功能。在这种情况下工作目录不写入任何内容:没有更改,没有提交,没有推送。它只会从远程拉取数据。

使用 git2go 我可以克隆远程存储库,load/lookup 远程源,获取远程,列出远程 headers,等等。似乎唯一不起作用的步骤是合并。 我的代码看起来像这样(我省略了错误处理):

repo, err:= git.OpenRepository(sitesConfig.Sites[SiteName].Path)
remote, err:= repo.LookupRemote("origin")
err = remote.SetCallbacks(&rcbs)
err = remote.Connect(git.ConnectDirectionFetch)
err = remote.ConnectFetch()

remote_master, err := repo.LookupReference("refs/remotes/origin/master")
mergeRemoteHead, err := repo.AnnotatedCommitFromRef(remote_master)
mergeHeads := make([]*git.AnnotatedCommit, 1)
mergeHeads[0] = mergeRemoteHead
err = repo.Merge(mergeHeads, nil, nil)
repo.StateCleanup()

运行这段代码没有出现错误,但是工作目录没有更新。在同一目录上使用 "git pull" 和 "git fetch && git marge origin/master" 效果很好。

是不是少了什么?最后的承诺?

您要求连接到遥控器两次(err = remote.Connect(git.ConnectDirectionFetch)err = remote.ConnectFetch()),但您没有要求它提供任何东西。与其尝试连接两次,不如使用一体化获取方法

remote.Fetch(nil, nil, nil)

连接、下载和更新远程跟踪分支。然后你可以检查是否有更新和合并或者做任何你需要的。