Maison  >  Article  >  développement back-end  >  Tree SHA n'est pas une erreur d'objet d'arborescence dans la bibliothèque go-github

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

王林
王林avant
2024-02-09 14:00:11461parcourir

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
}

Échec

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

et

422 Tree SHA is not a tree object []

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()

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer