假设您在git存储库中有一个文件:
应该使用哪些API来创建删除该文件的提交? 例如,在this question中提交文件而不在磁盘上创建它。现在是否可以在不使用索引(舞台区域)的情况下删除该文件?
我期待类似的流程,可能为树构建器创建git_tree_entry
,但似乎并非如此。 git_reference_list()
没有列出文件,所以有一个死胡同。搜索删除和删除的来源也没有成功。
答案 0 :(得分:4)
删除文件类似于添加文件 - 删除索引条目以暂存删除,然后您可以从索引创建提交。
您可能希望使用git_index_remove_bypath
,这将从索引中删除文件,解决文件中的所有冲突。
答案 1 :(得分:0)
这是一个复制粘贴示例;对于getLastCommit()
,请参阅this question。
bool commitStage (
git_repository * repo, git_signature * sign,
const char * message )
{
bool b = false;
int rc;
git_index * repo_idx; /* the stage area for our repository */
git_oid oid_idx_tree; /* the SHA1 for the tree generated from index */
git_oid oid_commit; /* the SHA1 for our commit */
git_tree * tree_cmt; /* tree generated from index */
git_commit * parent_commit;/* most recent commit in the head */
parent_commit = getLastCommit( repo );
if ( parent_commit != NULL )
{ /* we have the parent commit */
rc = git_repository_index( &repo_idx, repo );
if ( rc == 0 )
{ /* we now have the index (stage area) structure in repo_idx */
git_index_read(repo_idx);
/* the stage area may be altered here with functions like
git_index_add_bypath();
git_index_remove_bypath();
*/
/* by writing the index we get the SHA1 of the tree */
rc = git_index_write_tree( &oid_idx_tree, repo_idx );
if ( rc == 0 )
{
rc = git_tree_lookup(
&tree_cmt, repo, &oid_idx_tree );
if ( rc == 0 )
{ /* the actual tree structure; create a commit from it */
rc = git_commit_create(
&oid_commit, repo, "HEAD",
sign, sign, NULL,
message,
tree_cmt, 1, (const git_commit**)&parent_commit );
if ( rc == 0 )
{
b = true;
}
}
}
git_index_free( repo_idx );
}
git_commit_free( parent_commit );
}
return b;
}