我需要使用JGit获取与特定提交相关联的分支名称。我使用JGit获取存储库的完整提交SHA列表,现在需要知道它所属的分支的名称。
如果有人能告诉我如何实现这一点,我将不胜感激。
Map<ObjectId, String> map = git
.nameRev()
.addPrefix("refs/heads")
.add(ObjectId.fromString("<SHA-1>"))
.call();
refs/heads
命名空间中查找指向给定提交的引用。返回的映射最多包含一个条目,其中键是给定的提交 ID,值表示指向它的分支。log
像在存储库数据库中一样工作,因为refs
为空。如果使用.all()
进行提取,则可以找到分支名称(无需使用additionalRefs
)。 - AntoniossssaddRef
和FETCH_HEAD
的Ref
让命令考虑它。 - Rüdiger Herrmann根据文档所述,
ListBranchCommand类
setContains方法(String containsCommitish)
该方法用于设置包含指定提交的分支列表。
setContains
public ListBranchCommand setContains(String containsCommitish)
If this is set, only the branches that contain the specified commit-ish as an ancestor are returned.
Parameters:
containsCommitish - a commit ID or ref name
Returns:
this instance
Since:
3.4
这个API对应于git branch --contains <commit-ish>
如果您想列出远程分支(-r
)或者远程和本地分支(-a
),您也可能需要使用此API。
setListMode
public ListBranchCommand setListMode(ListBranchCommand.ListMode listMode)
Parameters:
listMode - optional: corresponds to the -r/-a options; by default, only local branches will be listed
Returns:
this instance
示例:
#list all the branches that "HEAD" belongs to.
try {
Git git = Git.open(new File("D:/foo/.git"));
List<Ref> refs = git.branchList().setContains("HEAD").setListMode(ListBranchCommand.ListMode.ALL).call();
System.out.println(refs);
} catch (Exception e) {
System.out.println(e);
}