Comment pousser (avec libgit2)

Comment puis-je faire un push avec libgit2? (Comme git push origin master sur la console)

Je veux utiliser la version C. Le clonage, l’ouverture, l’ajout de fichiers à indexer et la validation du travail fonctionnent comme un charme (voir le code ).

Le référentiel test-bare-est local.

Malheureusement, la référence et la documentation ne m’ont pas aidé. Les exemples sont très rares et pour la plupart obsolètes ( comme cela , la fonction git_push_new() semble avoir disparu).

Cela fait maintenant quelques heures que je devine et je pense avoir essayé toutes les combinaisons significatives d’extraits de code tirés de la référence et des exemples .

Edit: Je crains qu’il n’y ait aucune possibilité de le faire avec libgit2 du tout. Quelqu’un peut-il me suggérer des références qui falsifient / falsifient mes peurs?

Il existe certaines sources ( [1] , [2] ) dans les listes de diffusion Internet / qui disent qu’il est impossible de pousser avec libgit2 pour le moment , mais ce sera possible bientôt. Cependant, ces sources sont assez obsolètes.

La référence contient des fonctions liées au push (au moins par leur nom). Mais aucun ne semble fonctionner comme je le veux 🙁

    Le code qui fait l’affaire est:

      bool push(git_repository *repository) { // get the remote. git_remote* remote = NULL; git_remote_lookup( &remote, repository, "origin" ); // connect to remote git_remote_connect( remote, GIT_DIRECTION_PUSH ) // add a push refspec git_remote_add_push( remote, "refs/heads/master:refs/heads/master" ); // configure options git_push_options options; git_push_init_options( &options, GIT_PUSH_OPTIONS_VERSION ); // do the push git_remote_upload( remote, NULL, &options ); git_remote_free( remote ); return true; } 

    Bien sûr, vous devriez faire quelques vérifications d’erreur que j’ai omises pour des raisons de concision.