Heim > Backend-Entwicklung > Golang > 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
Freigeben: 2024-02-09 17:12:19
nach vorne
773 Leute haben es durchsucht

无法使用 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
}
Nach dem Login kopieren

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 []
Nach dem Login kopieren

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)
Nach dem Login kopieren

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)
Nach dem Login kopieren

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!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage