如何在 JGit 中使用 Repository::resolve(String)

How to use Repository::resolve(String) in JGit

我正在 java 使用来自 JGit 的 Class 存储库编写我的程序。

这个 class 有方法 resolve(String revstr)。

基本上,此方法解析 git 修订字符串和 returns 对象 ID。支持这些运算符的特定组合:

HEAD, MERGE_HEAD, FETCH_HEAD
SHA-1: a complete or abbreviated SHA-1
refs/...: a complete reference name
short-name: a short reference name under refs/heads, refs/tags, or refs/remotes namespace
tag-NN-gABBREV: output from describe, parsed by treating ABBREV as an abbreviated SHA-1.
id^: first parent of commit id, this is the same as id^1
id^0: ensure id is a commit
id^n: n-th parent of commit id
id~n: n-th historical ancestor of id, by first parent. id~3 is equivalent to id^1^1^1 or id^^^.
id:path: Lookup path under tree named by id
id^{commit}: ensure id is a commit
id^{tree}: ensure id is a tree
id^{tag}: ensure id is a tag
id^{blob}: ensure id is a blob

我想用这个方法

Repository repo;
ObjectId commit = repo.resolve("cnfuwfxmiazsdixfnsdiufsdhfiusfhsfisfh^{tree}");
System.out.println(commit );

预期输出:

cnfuwfxmiazsdixfnsdiufsdhfiusfhsfisfh

输出:

sjakfshdofcsmdfocsdfjdofdjgdhgfdgfhgf
//Output is another commit in project.

我想要插入的提交,但它显示了另一个提交。 我想是因为它是提交 id 的第一个父级。

有什么方法可以获得我放入方法 resolve() 中的相同提交 ID?

您传递给 resolve() 的表达式要求 cnf...tree id(顺便说一句,Git 对象 ID 仅包含十六进制字符)。这很可能是您得到的,您指定的提交的树 ID。

为了将字符串转换为 JGit ObjectId,请使用

ObjectId objectId = ObjectId.fromString( "..." );

另请参阅:How to obtain the RevCommit or ObjectId from a SHA1 ID string with JGit?