2

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

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

4

1 回答 1

2

编写树的典型工作流程通过索引。例如,git_index_add_frombuffer后跟git_index_write_tree. 即使您不想在磁盘上写入存储库的索引,您仍然可以通过创建内存索引来使用索引接口。

在没有索引的裸存储库中,您可以使用git_index_newfollowgit_index_read_tree来获取初始化为树内容的索引。然后使用 .将树写到存储库中git_index_write_tree_to

我对 treebuilder 界面不太熟悉,但看起来你必须递归地创建新的子树。例如,获取或创建src子树并将test.txtblob 插入其中。然后获取或创建根树并将src子树插入其中。

于 2018-11-20T17:20:53.287 回答