由于没有用于创建不使用与磁盘文件的提交没有复制粘贴例如libgit2 据我可以告诉我想我应该添加一个。
不要忘记,libgit2是全面发展,在这个时候(2013年3月),所以来看看官方文档和源代码,新的功能每天都会添加:
- libgit2 API
- 标题是很好的注释- 这里是一个例子
- 广泛的测试可以是灵感来源
- 也有一些官方的例子 , general.c是一个良好的开端
- 灵感可参见LibGit2Sharp -这里有一些测试
由于没有用于创建不使用与磁盘文件的提交没有复制粘贴例如libgit2 据我可以告诉我想我应该添加一个。
不要忘记,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()
该函数更新当前分支的头部。
如果你做一个git status
,函数执行后你会发现文件name-of-the-file.txt
出现被删除。 这是因为该功能不会创建一个实际的文件,只在GIT数据库的条目。
另外,还要注意的最后一个参数git_commit_create()
0和NULL表示这是第一次(根)提交。 对于所有其他应该有至少一个父提交的规定,使用也许获得git_commit_lookup()