go-git pull ведёт себя непредсказуемо
задача - пульнуть все изменения во всех ветках одного репозитория. в репозитории 2 ветки, обе стоят на одном коммите: master и branch1. в remote обе есть. с другого клона этого репозитория делаю push трёх коммитов в ветку master. проверяю что в удалённом репозитории branch1 не изменила своего положения, а master опережает её на 3 коммита. получаю из репозитория все references, прохожусь по всем, делаю чекаут и pull --force и в результате и master и branch1 указывают на коммит соответствующий origin/master, а origin/branch1 осталась там же. в чем может быть проблема и как мне добиться чтобы при pull локальная ветка встала на коммит remote?
func (r *Repository) Pull() error {
worktree, err := r.repo.Worktree()
if err != nil {
return err
}
branchesIter, err := r.repo.References()
if err != nil {
return err
}
defer branchesIter.Close()
if err := branchesIter.ForEach(func(ref *plumbing.Reference) error {
if err := worktree.Checkout(&git.CheckoutOptions{
Branch: plumbing.ReferenceName(fmt.Sprintf("refs/heads/%s", strings.TrimPrefix(ref.Name().Short(), "origin/"))),
Force: true,
Create: true,
}); err != nil {
worktree.Checkout(&git.CheckoutOptions{
Branch: plumbing.ReferenceName(fmt.Sprintf("refs/heads/%s", strings.TrimPrefix(ref.Name().Short(), "origin/"))),
Force: true,
})//как то так. код на работе остался, по памяти восстановил
}
if err := worktree.Pull(&git.PullOptions{Force: true, ReferenceName: ref.Target(), SingleBranch: true}); err != nil && err != git.NoErrAlreadyUpToDate {
return err
}
return nil
}); err != nil {
return err
}
return nil
}