首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正在删除go-git中的本地分支:找不到分支

正在删除go-git中的本地分支:找不到分支
EN

Stack Overflow用户
提问于 2019-04-18 19:50:04
回答 1查看 290关注 0票数 1

我正在尝试使用go-git删除本地分支,但在运行时收到错误branch not found

代码语言:javascript
复制
branch := "refs/heads/template/test"
err = repo.DeleteBranch(branch)

代码语言:javascript
复制
err = repo.DeleteBranch(plumbing.ReferenceName(branch))

仅使用分支的名称(template/test)也不起作用。该分支包含在分支列表中。这

代码语言:javascript
复制
refs, err := repo.Branches()
err = refs.ForEach(func(ref *plumbing.Reference) error {
    fmt.Println(ref)
    return nil
})

提供以下输出:

代码语言:javascript
复制
f2d93bb67ced13936dbbbbfb44502abd42e7df13 refs/heads/global
df46ab083f17051afd6ca20e3ea4bfe01aedbb37 refs/heads/template/test
141f45305380aa0dc9f6802512ea76c5d48a87a1 refs/heads/template/test2

如何删除?

更新:我检查了函数DeleteBranch,它看起来像这样:

代码语言:javascript
复制
// DeleteBranch delete a Branch from the repository and delete the config
func (r *Repository) DeleteBranch(name string) error {
    cfg, err := r.Storer.Config()
    if err != nil {
        return err
    }

    if _, ok := cfg.Branches[name]; !ok {
        return ErrBranchNotFound
    }

    delete(cfg.Branches, name)
    return r.Storer.SetConfig(cfg)

}

然后,我创建了cfg := repo.Storer.Config()并检查了cfg.Branches包含的内容。令人惊讶的是,这个映射只有以下元素:&{global origin refs/heads/global 0xc0007fbf80}。因此无法删除其他分支,因为在此配置中找不到它们。

EN

回答 1

Stack Overflow用户

发布于 2021-10-21 23:43:03

我知道这个问题很古老,但这里的命名也让我犯错,所以我想我应该提供一个答案。

感谢@Hephaestus和链接到的帖子,我能够整理出正确的方法。如果你想删除一个本地分支(例如git branch -d foo),看起来你应该使用repo.Storer.RemoveReference

在我的例子中,我已经有了一段(短)分支名称:

代码语言:javascript
复制
for _, branchName := range branches {
  ref := plumbing.NewBranchReferenceName(branchName)
  err = repo.Storer.RemoveReference(ref)

  if err != nil {
    return "", err
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55745430

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档