使用 Jgit 和管道命令创建提交

Creating commit with Jgit and plumbing commands

我正在尝试使用 JGit 中的管道命令构建提交。除了获取信息,我基本上使用这些命令:

treeFormatter.append(folderName, FileMode.TREE, treeObjectId);
treeFormatter.append(fileName, FileMode.REGULAR_FILE, blobObjectId);

最终

objectInserter.insert( treeFormatter );

最后将最终树设置为提交。这对某些提交非常有效,但对于其他提交,尽管文件在那里,但我无法推送回购协议。 bash 表示:

error: unpack failed: error Invalid tree (tree number): incorrectly sorted

我发现 here

树条目按包含条目名称的字节序列排序。但是,出于排序比较的目的,比较树对象的条目时,就好像条目名称字节序列具有尾随 ASCII ‘/’ (0x2f)。

因此尝试根据转换为对象名称(而非文件名)字节的特定顺序添加文件,但与 bash 的实际提交相比,我无法弄清楚哪个订单 Git 需要添加文件。

所以:有人知道如何使用 JGit 中的管道方法来构建包含多个文件的提交吗?我很确定我只需要正确的对象排序方式,但找不到它是什么

刚刚找到解决方案,

您需要根据文件名或文件夹名以特定顺序放置文件,我的问题是我正在寻找 ObjectId.getName() ,这是这个散列。