在 GitHub 项目中,当我们转到任何分支页面时,我们可以看到描述分支的提前/延迟提交编号的图表。掌握。
我们如何使用 JGit 确定数字前面的数字?
I used BranchTrackingStatus
为此类,但我得到BranchTrackingStatus
对象始终为空。
这是我使用的代码
private static Lis<Integer> getCounts(Repository repository, String branchName) throws IOException{
BranchTrackingStatus trackingStatus = BranchTrackingStatus.of(repository, branchName);
List<Integer> counts = new ArrayList<Integer>();
if (trackingStatus != null){
counts.add(trackingStatus.getAheadCount());
counts.add(trackingStatus.getBehindCount());
} else {
counts.add(0);
counts.add(0);
}
return counts;
}
public void show(String repoName, String baseBranchName) throws IOException, GitAPIException{
Repository repository = repoManager.openRepository(new Project.NameKey(repoName));
List<Ref> call = new Git(repository).branchList().call();
for (Ref ref : call) {
List<Integer> counts = getCounts(repository, ref.getName());
System.out.println("Commits ahead : "+counts.get(0));
System.out.println("Commits behind : "+counts.get(1));
}
}
BranchTrackingStatus.of()
假设branchName
表示本地分支,可以通过其全名(例如refs/heads/master
)或其简称(例如master
)。它返回null
如果给定branchName
找不到或跟踪分支未配置或不存在。
要比较两个任意分支,您可以采用BranchTrackingStatus
代码如下:
void calculateDivergence(Ref local, Ref tracking) throws IOException {
try (RevWalk walk = new RevWalk(repository)) {
RevCommit localCommit = walk.parseCommit(local.getObjectId());
RevCommit trackingCommit = walk.parseCommit(tracking.getObjectId());
walk.setRevFilter(RevFilter.MERGE_BASE);
walk.markStart(localCommit);
walk.markStart(trackingCommit);
RevCommit mergeBase = walk.next();
walk.reset();
walk.setRevFilter(RevFilter.ALL);
aheadCount = RevWalkUtils.count(walk, localCommit, mergeBase);
behindCount = RevWalkUtils.count(walk, trackingCommit, mergeBase);
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)