gpt4 book ai didi

javascript - 使用 NodeGit/LibGit2 将文件写入不在根目录的裸存储库

转载 作者:行者123 更新时间:2023-11-30 14:17:11 24 4
gpt4 key购买 nike

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

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

最佳答案

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

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

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

关于javascript - 使用 NodeGit/LibGit2 将文件写入不在根目录的裸存储库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53394879/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com