如何使用 JGit 找到提交的分支?
How to find the branch for a commit with JGit?
我需要使用 JGit 获取与特定提交关联的分支名称。我使用 JGit 获取存储库的提交 SHA 的完整列表,现在我需要知道它所属的分支的名称。
如果有人能告诉我如何实现这一点,我将不胜感激。
正如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);
}
在Git中,提交不属于分支。提交是不可变的,而分支可以更改它们的名称以及它们指向的提交。
如果存在直接指向提交或提交的后继者的分支,则提交可以从分支(或标记或其他引用)到达。
在 JGit 中,NameRevCommand
可用于查找直接指向提交的分支(如果有的话)。例如:
Map<ObjectId, String> map = git
.nameRev()
.addPrefix("refs/heads")
.add(ObjectId.fromString("<SHA-1>"))
.call();
上面的代码片段在 refs/heads
命名空间中查找指向给定提交的引用。返回的映射最多包含一个条目,其中键是给定的提交 ID,值表示指向它的分支。
我需要使用 JGit 获取与特定提交关联的分支名称。我使用 JGit 获取存储库的提交 SHA 的完整列表,现在我需要知道它所属的分支的名称。
如果有人能告诉我如何实现这一点,我将不胜感激。
正如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);
}
在Git中,提交不属于分支。提交是不可变的,而分支可以更改它们的名称以及它们指向的提交。
如果存在直接指向提交或提交的后继者的分支,则提交可以从分支(或标记或其他引用)到达。
在 JGit 中,NameRevCommand
可用于查找直接指向提交的分支(如果有的话)。例如:
Map<ObjectId, String> map = git
.nameRev()
.addPrefix("refs/heads")
.add(ObjectId.fromString("<SHA-1>"))
.call();
上面的代码片段在 refs/heads
命名空间中查找指向给定提交的引用。返回的映射最多包含一个条目,其中键是给定的提交 ID,值表示指向它的分支。