C 如何推送(使用libgit2)

C 如何推送(使用libgit2),c,qt,libgit2,C,Qt,Libgit2,如何使用libgit2进行推送?(如控制台上的git push origin master) 我想使用C版本。克隆、打开、将文件添加到索引和提交工作就像一个符咒(请参阅) 测试存储库是本地的 不幸的是,参考资料和文档对我没有帮助。示例非常罕见,而且大多已经过时(git\u push\u new()函数似乎已经不存在了) 我已经猜了几个小时了,我想我尝试了和中所有有意义的代码片段组合 编辑:我担心用libgit2根本不可能做到这一点。 有人能给我推荐一些能证明我的恐惧的证明吗 互联网/邮件列表中有

如何使用libgit2进行推送?(如控制台上的git push origin master)

我想使用C版本。克隆、打开、将文件添加到索引和提交工作就像一个符咒(请参阅)

测试存储库是本地的

不幸的是,参考资料和文档对我没有帮助。示例非常罕见,而且大多已经过时(
git\u push\u new()
函数似乎已经不存在了)

我已经猜了几个小时了,我想我尝试了和中所有有意义的代码片段组合

编辑:我担心用libgit2根本不可能做到这一点。 有人能给我推荐一些能证明我的恐惧的证明吗

互联网/邮件列表中有一些消息来源(,)表示,目前不可能使用libgit2,但很快就会实现。 然而,这些来源是相当过时的


引用包含一些与推送相关的函数(至少按名称)。但似乎没有一个能按我所希望的方式工作:(

实现此功能的代码是:

 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; 
 }

当然,你应该做一些错误检查,为了简洁起见,我省略了这些检查。

看起来你最后忘了调用
git\u remote\u free
。我想你是对的。在我的实际代码中,它是在一个非常不同的位置释放的。所以我忘了在这里添加它。谢谢!
git\u remote\u add\u push()
的参数数目错误。显然,库已经随着时间的推移发生了变化。我已经三年多没有使用libgit2了。可能是
git\u remote\u add\u push(repository,“origin”,“refs/heads/master:refs/heads/master”);
现在可以工作了吗?另请参见:如何将所有分支和标记推送到远程?