Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Tidak dapat membuat komitmen dengan go-github dan 422 - kemas kini tidak pantas

Tidak dapat membuat komitmen dengan go-github dan 422 - kemas kini tidak pantas

PHPz
PHPzke hadapan
2024-02-09 17:12:19694semak imbas

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

Editor PHP Xiaoxin menghadapi masalah semasa menggunakan go-github: semasa membuat penyerahan, ralat 422 telah berlaku dan ia menggesa "Kemas kini bukan ke hadapan pantas". Apakah punca khusus masalah ini? Bagaimana untuk menyelesaikannya? Seterusnya, kami akan memberi anda jawapan terperinci.

Kandungan soalan

Saya menggunakan fungsi berikut untuk hanya membuat komitmen baharu dalam cawangan menggunakan go-github perpustakaan

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
}

Operasi ini gagal:

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 []

Kenapa tidak pantas ke hadapan? Ia hanyalah komit baharu yang dibuat daripada cawangan/komit sedia ada.

ps: Saya sudah pasti tidak ingin fail baharu dibuat atas komitmen.

Penyelesaian

func (s *gitservice) createcommit(ctx context.context, owner string, repo string, commit *commit) (*commit, *response, error)

Parametercommit用于指定新commit的一些信息,包括新commit的parents (lihat Pelaksanaan).

Dalam kod anda, komit baharu dan komit lama mempunyai komit yang sama parents,因此这不是快进推送到分支。为了使其快速推送到分支,新提交的 parents harus menunjuk ke komit lama.

Saya rasa perubahan berikut akan menjadikannya pantas ke hadapan:

+ commit.Parents = []*github.Commit{commit}
  newCommit, _, err := client.Git.CreateCommit(ctx, repoOwner, commitOpts.Repo, commit)

Atas ialah kandungan terperinci Tidak dapat membuat komitmen dengan go-github dan 422 - kemas kini tidak pantas. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam