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.
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.
Solutionfunc (s *gitservice) createcommit(ctx context.context, owner string, repo string, commit *commit) (*commit, *response, error)
(voir commit
用于指定新commit的一些信息,包括新commit的parents
Implémentation).
qui devrait pointer vers l'ancien commit. parents
,因此这不是快进推送到分支。为了使其快速推送到分支,新提交的 parents
+ 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!