Maison  >  Article  >  développement back-end  >  Impossible de créer un commit avec go-github et 422 - la mise à jour n'est pas rapide

Impossible de créer un commit avec go-github et 422 - la mise à jour n'est pas rapide

PHPz
PHPzavant
2024-02-09 17:12:19692parcourir

无法使用 go-github 和 422 创建提交 - 更新不是快进

L'éditeur PHP Xiaoxin a rencontré un problème lors de l'utilisation de go-github : lors de la création d'une soumission, une erreur 422 s'est produite et le message "La mise à jour n'est pas une avance rapide" s'est affiché. Quelle est la cause spécifique de ce problème ? Comment le résoudre? Ensuite, nous vous donnerons des réponses détaillées.

Contenu de la question

J'utilise la fonction suivante pour créer simplement un nouveau commit dans une branche en utilisant la go-github bibliothèque

func ghapicreatecommit(ctx context.context, client *github.client, commitopts *commitoptions) error {
    // get the reference of the branch
    ref, _, err := client.git.getref(ctx, repoowner, commitopts.repo, "refs/heads/"+commitopts.branch)
    if err != nil {
        return err
    }
    commit, _, err := client.git.getcommit(ctx, repoowner, commitopts.repo, *ref.object.sha)
    if err != nil {
        return err
    }

    commit.message = github.string(commitopts.commitmessage)

    // create a new commit with the updated commit message
    newcommit, _, err := client.git.createcommit(ctx, repoowner, commitopts.repo, commit)
    if err != nil {
        return err
    }
    // attach the new commit to the reference
    ref.object.sha = newcommit.sha

    // update the branch reference to point to the new commit
    _, _, err = client.git.updateref(ctx, repoowner, commitopts.repo, ref, false)
    if err != nil {
        return err
    }

    return nil
}

Cette opération a échoué :

PATCH https://api.github.com/repos/MyOrg/myrepo/git/refs/heads/the-branch-I-am-creating-the-new-commit-to: 422 Update is not a fast forward []

Pourquoi ne pas avancer rapidement ? C'est juste un nouveau commit créé à partir d'une branche/commit existante.

ps : Je ne veux absolument pas qu'un nouveau fichier soit créé lors de la validation.

Solution

func (s *gitservice) createcommit(ctx context.context, owner string, repo string, commit *commit) (*commit, *response, error)

Paramètres

(voir commit用于指定新commit的一些信息,包括新commit的parentsImplémentation).

Dans votre code, le nouveau commit et l'ancien commit ont le même

qui devrait pointer vers l'ancien commit. parents,因此这不是快进推送到分支。为了使其快速推送到分支,新提交的 parents

Je suppose que les changements suivants permettront d'avancer rapidement :

+ commit.Parents = []*github.Commit{commit}
  newCommit, _, err := client.Git.CreateCommit(ctx, repoOwner, commitOpts.Repo, commit)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer