Heim  >  Artikel  >  Backend-Entwicklung  >  Mit go-github und 422 kann kein Commit erstellt werden – die Aktualisierung erfolgt nicht schnell

Mit go-github und 422 kann kein Commit erstellt werden – die Aktualisierung erfolgt nicht schnell

PHPz
PHPznach vorne
2024-02-09 17:12:19747Durchsuche

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

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.

Frageninhalt

Ich verwende die folgende Funktion, um mithilfe der go-githubBibliothek

einfach einen neuen Commit in einem Zweig zu erstellen
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.

Lösung

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen