使用NodeGit / LibGit2将文件写入裸目录,而不是在根目录下

时间:2018-11-20 14:10:06

标签: javascript libgit2 nodegit

我已经可以使用下面的代码将文件写入裸存储库中的分支,但是它仅适用于根目录中的文件。在文档中找不到如何为子文件夹构建树并将其用作提交的好例子。

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)中发布(例如),需要进行哪些修改?

1 个答案:

答案 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子树插入其中。