我正在尝试实现一些可以给我 git pull
或 git fetch && git merge
的结果的东西。我得到了部分工作,但我遇到的问题是在运行以下代码后,当前的 repo 认为有本地更改要提交。
据我所知,我相信我可能没有从正确的 HEAD 创建带注释的提交,或者我需要进行另一次提交? (我不确定)。
我的代码看起来像这样,但我卡住了:
func (repo *Repo) Pull() error {
// Get remote
remote, err := repo.Remotes.Lookup("origin")
if err != nil {
remote, err = repo.Remotes.Create("origin", repo.Path())
if err != nil {
return err
}
}
// Get the branch
branch, err := repo.Branch()
if err != nil {
return err
}
// Get the name
branchName, err := branch.Name()
if err != nil {
return err
}
if err := remote.Fetch([]string{}, &git.FetchOptions{}, ""); err != nil {
return err
}
// Merge
remoteRef, err := repo.References.Lookup("refs/remotes/origin/" + branchName)
if err != nil {
return err
}
mergeRemoteHead, err := repo.AnnotatedCommitFromRef(remoteRef)
if err != nil {
return err
}
mergeHeads := make([]*git.AnnotatedCommit, 1)
mergeHeads[0] = mergeRemoteHead
if err = repo.Merge(mergeHeads, nil, nil); err != nil {
return err
}
return nil
}
运行它后,我得到了来自远程 merge 的更改并更新了工作目录,但它告诉我需要进行提交。
我想我有一个与 this question 的 OP 类似的问题.
最佳答案
这就是 libgit2 的 git_merge 的方式功能记录在案:
Any changes are staged for commit and any conflicts are written to the index. Callers should inspect the repository's index after this completes, resolve any conflicts and prepare a commit.
所以你必须添加代码来检查index has conflicts是否.如果没有,您可以commit上演了什么。否则,您可能希望提示用户解决冲突。
关于Git2go - pull && merge ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33122773/