如何使用JGit找到提交的分支?

时间:2017-11-03 01:07:40

标签: git jgit

我需要使用JGit获取与特定提交相关联的分支的名称。我使用JGit获取存储库的提交SHA的完整列表,现在我需要知道它所属的分支的名称。

感谢有人能让我知道如何实现这一目标。

2 个答案:

答案 0 :(得分:2)

在Git中,提交不属于分支。提交是不可变的,而分支可以更改它们的名称以及它们指向的提交。

如果存在直接指向提交或提交的后继者的分支,则从分支(或标记或其他引用)提交

在JGit中,NameRevCommand可用于查找直接指向提交的分支(如果有)。例如:

Map<ObjectId, String> map = git
  .nameRev()
  .addPrefix( "refs/heads" )
  .add( ObjectId.fromString( "<SHA-1>" ) )
  .call();

上面的代码片段在refs / heads命名空间中查找指向给定提交的引用。返回的映射最多包含一个条目,其中键是给定的提交ID,值表示指向它的分支。

答案 1 :(得分:0)

正如document所说,

  

Class ListBranchCommand

     

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);
}