Удаление локальной ветки в go-git: ветка не найдена

Я пытаюсь удалить локальную ветку с помощью go-git, но получаю ошибку branch not found когда я бегу

branch := "refs/heads/template/test"
err = repo.DeleteBranch(branch)

или же

err = repo.DeleteBranch(plumbing.ReferenceName(branch))

Используя только название ветви (template/test) тоже не работает. Филиал включен в список филиалов. это

refs, err := repo.Branches()
err = refs.ForEach(func(ref *plumbing.Reference) error {
    fmt.Println(ref)
    return nil
})

обеспечивает следующий вывод:

f2d93bb67ced13936dbbbbfb44502abd42e7df13 refs/heads/global
df46ab083f17051afd6ca20e3ea4bfe01aedbb37 refs/heads/template/test
141f45305380aa0dc9f6802512ea76c5d48a87a1 refs/heads/template/test2

Как я могу удалить это?

Обновление: я проверил функцию DeleteBranch, она выглядит так:

// 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}, Таким образом, другие ветви не могут быть удалены, потому что они не найдены в этой конфигурации.

1 ответ

Я знаю, что этот вопрос довольно старый, но название здесь тоже сбило меня с толку, поэтому я подумал, что дам ответ.

Благодаря @Hephaestus и сообщению, на которое есть ссылка, я смог найти правильный подход. Если вы пытаетесь удалить локальную ветку (например, git branch -d foo) похоже, что вы должны использовать repo.Storer.RemoveReference.

В моем случае у меня уже есть часть (коротких) имен веток:

      for _, branchName := range branches {
  ref := plumbing.NewBranchReferenceName(branchName)
  err = repo.Storer.RemoveReference(ref)

  if err != nil {
    return "", err
  }
}
Другие вопросы по тегам