Maison > développement back-end > Golang > le corps du texte

Tree SHA n'est pas une erreur d'objet d'arborescence dans la bibliothèque go-github

王林
Libérer: 2024-02-09 14:00:11
avant
458 Les gens l'ont consulté

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

Lors de l'utilisation de la bibliothèque go-github, vous pouvez rencontrer une erreur appelée "Tree SHA n'est pas un objet arbre". Cette erreur se produit car la valeur SHA que vous avez fournie n'est pas un objet d'arborescence valide. En règle générale, cette erreur peut être provoquée par un fichier ou un répertoire qui n'existe pas, une valeur SHA incorrecte ou un autre problème. Pour résoudre ce problème, vous pouvez vérifier que la valeur SHA que vous avez fournie est correcte et vous assurer que le fichier ou le répertoire approprié existe. Si le problème persiste, vous pouvez consulter la documentation du référentiel go-github ou demander de l'aide pour d'autres solutions. L'éditeur PHP Yuzi espère que ce petit guide vous sera utile !

Contenu de la question

J'essaie de créer un commit vide dans github en utilisant go-github.

Le code suivant :

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
}
Copier après la connexion

Échec

newcommitresponse, _, err := client.git.createcommit(ctx, owner, repo, newcommit)
Copier après la connexion

et

422 Tree SHA is not a tree object []
Copier après la connexion

Je ne trouve nulle part aucune information pertinente sur cette erreur.

Des idées ?

Solution de contournement

Lorsque vous utilisez git cli, git lui-même exécutera une traduction "significative" - ​​par exemple : remplacez le commit par le sha de l'arborescence concernée.

En utilisant cette API de niveau inférieur, vous devez effectuer cette conversion explicitement.

En utilisant go-github, vous pouvez le faire avec une requête supplémentaire :

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

treeSHA := commit.GetTree().GetSHA()
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!