Maison > développement back-end > Golang > 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
Libérer: 2024-02-09 17:12:19
avant
757 Les gens l'ont consulté

无法使用 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
}
Copier après la connexion

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 []
Copier après la connexion

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)
Copier après la connexion

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)
Copier après la connexion

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!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal