我已经可以使用下面的代码将文件写入裸存储库中的分支,但是它仅适用于根目录中的文件。在文档中找不到如何为子文件夹构建树并将其用作提交的好例子。
async function writeFile(filename, buffer) {
const signature = NodeGit.Signature.now('Jamie', 'jamie@diffblue.com');
const repo = await NodeGit.Repository.openBare('java-demo.git');
const commit = await repo.getBranchCommit('master');
const rootTree = await commit.getTree();
const builder = await NodeGit.Treebuilder.create(repo, rootTree);
const oid = await NodeGit.Blob.createFromBuffer(repo, buffer, buffer.length);
await builder.insert(filename, oid, NodeGit.TreeEntry.FILEMODE.BLOB);
const finalOid = await builder.write();
await repo.createCommit('refs/heads/master', signature, signature, 'Commit message', finalOid, [commit]);
}
const buffer = new Buffer('Hello\n', 'utf-8');
writeFile('test.txt', buffer).then(() => console.log('Done'));
要在src / test.txt(而不是test.txt)中发布(例如),需要进行哪些修改?
答案 0 :(得分:2)
用于编写树的典型工作流通过索引。例如,git_index_add_frombuffer
后跟git_index_write_tree
。即使您不想写入磁盘上存储库的索引,您仍然可以通过创建内存索引来使用索引接口。
在没有索引的裸仓库中,可以使用git_index_new
后跟git_index_read_tree
来获取初始化为树内容的索引。然后使用git_index_write_tree_to
将树写到存储库中。
我对treebuilder界面不太熟悉,但是看起来您将需要递归创建新的子树。例如,获取或创建src
子树,然后将test.txt
blob插入其中。然后获取或创建根树并将src
子树插入其中。