gpt4 book ai didi

c++ - 如何使用 libgit2 提交到 git 存储库?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:51:10 26 4
gpt4 key购买 nike

由于没有使用磁盘上的文件创建提交的复制粘贴示例 libgit2 as far as I can tell我想我应该添加一个。

不要忘记 libgit2 目前正在全面开发中(2013 年 3 月),因此请查看官方文档和源代码,因为每天都会添加新功能:

最佳答案

bool addGitCommit ( 
git_repository * repo, git_signature * sign,
const char * content, int content_sz,
const char * message )
{
int rc; /* return code for git_ functions */
git_oid oid_blob; /* the SHA1 for our blob in the tree */
git_oid oid_tree; /* the SHA1 for our tree in the commit */
git_oid oid_commit; /* the SHA1 for our initial commit */
git_blob * blob; /* our blob in the tree */
git_tree * tree_cmt; /* our tree in the commit */
git_treebuilder * tree_bld; /* tree builder */
bool b = false;

/* create a blob from our buffer */
rc = git_blob_create_frombuffer(
&oid_blob,
repo,
content,
content_sz );
if ( rc == 0 ) { /* blob created */
rc = git_blob_lookup( &blob, repo, &oid_blob );
if ( rc == 0 ) { /* blob created and found */
rc = git_treebuilder_create( &tree_bld, NULL );
if ( rc == 0 ) { /* a new tree builder created */
rc = git_treebuilder_insert(
NULL,
tree_bld,
"name-of-the-file.txt",
&oid_blob,
GIT_FILEMODE_BLOB );
if ( rc == 0 ) { /* blob inserted in tree */
rc = git_treebuilder_write(
&oid_tree,
repo,
tree_bld );
if ( rc == 0 ) { /* the tree was written to the database */
rc = git_tree_lookup(
&tree_cmt, repo, &oid_tree );
if ( rc == 0 ) { /*we've got the tree pointer */
rc = git_commit_create(
&oid_commit, repo, "HEAD",
sign, sign, /* same author and commiter */
NULL, /* default UTF-8 encoding */
message,
tree_cmt, 0, NULL );
if ( rc == 0 ) {
b = true;
}
git_tree_free( tree_cmt );
}
}
}
git_treebuilder_free( tree_bld );
}
git_blob_free( blob );
}
}
return b;
}

存储库来自 git_repository_init()git_repository_open()。签名来自 git_signature_now()git_signature_new()

该函数更新当前分支的 HEAD。

如果您在函数执行后执行 git status,您会注意到文件 name-of-the-file.txt 显示为已删除。这是因为该函数不会创建实际文件,只会在 git 数据库中创建一个条目。

另外,请注意 git_commit_create() 的最后一个参数。 0 和 NULL 表示这是第一次(根)提交。对于所有其他,至少应该指定一个父提交,可以使用 git_commit_lookup() 获得。


我只是在学习这些东西。如果您知道得更多,请改进此答案。

关于c++ - 如何使用 libgit2 提交到 git 存储库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15711444/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com