JGit裸提交/树构造

时间:2014-03-11 09:07:51

标签: jgit

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

在JGit中执行此操作的惯用方法是什么?

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

1 个答案:

答案 0 :(得分:2)

您可以使用的低级API是TreeFormatter和CommitBuilder。

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

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

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