ホームページ >バックエンド開発 >Golang >go-github および 422 でコミットを作成できません - 更新が早送りされません

go-github および 422 でコミットを作成できません - 更新が早送りされません

PHPz
PHPz転載
2024-02-09 17:12:19779ブラウズ

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

php エディタ Xiaoxin は、go-github の使用時に問題が発生しました。送信の作成時に 422 エラーが発生し、「更新は早送りされません」というメッセージが表示されました。この問題の具体的な原因は何ですか?どうやって解決すればいいでしょうか?次に、具体的な回答をさせていただきます。

質問の内容

次の関数を使用して、go-github ライブラリを使用してブランチに新しいコミットを単純に作成します。 リーリー

この操作は失敗しました:

リーリー

なぜ早送りしないのでしょうか?これは、既存のブランチ/コミットから作成された新しいコミットです。

ps:

コミット時に新しいファイルが作成されることは、絶対に望ましくありません。

解決策

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
}

Parameters

commit は、新しいコミットの parents を含む、新しいコミットに関するいくつかの情報を指定するために使用されます (実装を参照)。

コードでは、新しいコミットと古いコミットは同じ

parents を持っているため、これはブランチへの早送りプッシュではありません。ブランチに迅速にプッシュするには、新しいコミットの parents が古いコミットを指す必要があります。

次の変更により早送りが可能になると思います:

リーリー

以上がgo-github および 422 でコミットを作成できません - 更新が早送りされませんの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。