做git fetch&& git从远程与git2go合并

时间:2015-04-14 14:23:19

标签: go libgit2

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

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

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"在同一目录上工作正常。

缺少什么?最后提交?

1 个答案:

答案 0 :(得分:1)

您要求连接两次遥控器(err = remote.Connect(git.ConnectDirectionFetch)err = remote.ConnectFetch()),但您没有要求任何东西。不要尝试连接两次,而是使用all-in-one fetch方法

remote.Fetch(nil, nil, nil)

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