Rumah >pembangunan bahagian belakang >Golang >Tree SHA bukan ralat objek pokok dalam pustaka go-github

Tree SHA bukan ralat objek pokok dalam pustaka go-github

王林
王林ke hadapan
2024-02-09 14:00:11503semak imbas

go-github 库中的 Tree SHA is not a tree object 错误

Apabila menggunakan pustaka go-github, anda mungkin menghadapi ralat yang dipanggil "Tree SHA bukan objek pokok". Ralat ini berlaku kerana nilai SHA yang anda berikan bukan objek pokok yang sah. Biasanya, ralat ini boleh disebabkan oleh fail atau direktori yang tidak wujud, nilai SHA yang salah atau beberapa isu lain. Untuk menyelesaikan isu ini, anda boleh menyemak sama ada nilai SHA yang anda berikan adalah betul dan memastikan fail atau direktori yang berkaitan wujud. Jika masalah berterusan, anda boleh menyemak dokumentasi repositori go-github atau meminta bantuan untuk penyelesaian selanjutnya. Editor PHP Yuzi berharap panduan ringkas ini akan membantu anda!

Kandungan soalan

Saya cuba membuat komit kosong dalam github menggunakan go-github.

Kod berikut:

func createheadbranchforpr(ctx context.context, basebranch, repo, owner string,
    client *github.client) (newbranch string, err error) {
    newbranch = createrandombranchname()
    basebranchref, _, err := client.git.getref(ctx, owner, repo, "heads/"+basebranch)
    if err != nil {
        return "", err
    }
    latestcommitsha := basebranchref.object.getsha()
    // create a new tree with no changes from the latest commit on the base branch
    newtree := &github.tree{
        sha: &latestcommitsha,
    }
    currenttime := time.now()
    newcommit := &github.commit{
        message: github.string("test commit"),
        tree:    newtree,
        parents: []github.commit{
            {
                sha: github.string(latestcommitsha),
            },
        },
        author: &github.commitauthor{
            name:  github.string(prcommitterauthorname),
            email: github.string(prcommitterauthoremail),
            date:  &currenttime,
        },
        committer: &github.commitauthor{
            name:  github.string(prcommitterauthorname),
            email: github.string(prcommitterauthorname),
            date:  &currenttime,
        },
        sha: &latestcommitsha,
    }
    newcommitresponse, _, err := client.git.createcommit(ctx, owner, repo, newcommit)
    if err != nil {
        return "", err
    }
    // create a new branch based on the new commit
    newbranchref := &github.reference{
        ref:    github.string("refs/heads/" + newbranch),
        object: &github.gitobject{sha: newcommitresponse.sha},
    }
    _, _, err = client.git.createref(ctx, owner, repo, newbranchref)
    if err != nil {
        return "", err
    }
    return newbranch, nil
}

Gagal

newcommitresponse, _, err := client.git.createcommit(ctx, owner, repo, newcommit)

dan

422 Tree SHA is not a tree object []

Saya tidak dapat mencari sebarang maklumat yang berkaitan tentang ralat ini di mana-mana sahaja.

Ada idea?

Penyelesaian

Apabila anda menggunakan git cli, git sendiri akan menjalankan terjemahan "bermakna" - contohnya: gantikan komit dengan sha pokok yang berkaitan.

Menggunakan API peringkat rendah ini, anda mesti melakukan penukaran ini secara eksplisit.

Menggunakan go-github anda boleh melakukan ini dengan pertanyaan tambahan:

commit, _, err := client.Git.GetCommit(ctx, owner, repo, latestCommitSHA)
if err != nil {
   return "", err
}

treeSHA := commit.GetTree().GetSHA()

Atas ialah kandungan terperinci Tree SHA bukan ralat objek pokok dalam pustaka go-github. 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