Der PHP-Editor Xiaoxin ist bei der Verwendung von go-github auf ein Problem gestoßen: Beim Erstellen einer Einreichung ist ein 422-Fehler aufgetreten und die Meldung „Update ist kein schneller Vorlauf“. Was ist die konkrete Ursache dieses Problems? Wie man es löst? Als nächstes geben wir Ihnen detaillierte Antworten.
Ich verwende die folgende Funktion, um mithilfe der go-github
Bibliothek
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 }
Dieser Vorgang ist fehlgeschlagen:
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 []
Warum nicht schnell vorspulen? Es handelt sich lediglich um einen neuen Commit, der aus einem vorhandenen Branch/Commit erstellt wurde.
ps: Ich auf keinen Fall möchte, dass beim Commit eine neue Datei erstellt wird.
func (s *gitservice) createcommit(ctx context.context, owner string, repo string, commit *commit) (*commit, *response, error)
Parametercommit
用于指定新commit的一些信息,包括新commit的parents
(siehe Implementierung).
In Ihrem Code haben das neue Commit und das alte Commit dasselbe parents
,因此这不是快进推送到分支。为了使其快速推送到分支,新提交的 parents
sollten auf das alte Commit verweisen.
Ich schätze, die folgenden Änderungen sorgen für einen schnellen Vorlauf:
+ commit.Parents = []*github.Commit{commit} newCommit, _, err := client.Git.CreateCommit(ctx, repoOwner, commitOpts.Repo, commit)
Das obige ist der detaillierte Inhalt vonMit go-github und 422 kann kein Commit erstellt werden – die Aktualisierung erfolgt nicht schnell. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!