JGit裸提交/树构造

我正在尝试使用jgit将单个blob直接提交到存储库.我知道如何插入blob并获取它的sha1,但是我在构建这个场景的树时遇到了困难.我似乎无法弄清楚如何正确使用jgit的树抽象(TreeWalk等)以递归方式构造一个树,几乎与之前的提交相同,只有blob的不同父树.

在JGit中这样做的惯用方法是什么?

我问的原因是因为我正在编写一个程序,它是一种生活在git存储库中的文档的编辑器.在我的例子中,使用git的重点是能够同时拥有多个版本的文档(也就是分支).由于它是一个编辑器,我必须能够提交更改,但是因为我想同时看到文档的多个版本,所以不可能检查,修改文件和使用JGit瓷器API,它必须直接工作用git对象.

最佳答案 您可以使用的低级API是
TreeFormatter和CommitBuilder.

可以在here中看到使用它的示例.在这种情况下,它构造一个具有多个子树的新树对象.

在您的情况下,您可能必须递归地遍历树并在更改文件的路径上创建新的树对象,并将它们自下而上插入.对于树的其余部分,您可以使用现有的树ID,而不必进入它们.我建议查看TreeWalk#setRecursive和TreeWalk #setPostOrderTraversal.

另一个选择是创建一个内核DirCache,用提交和更新的条目填充DirCacheEntries,然后调用DirCache#writeTree.

点赞