在GitHub项目中,当我们进入任何分支页面时,我们可以看到描述提前/后分支w.r.t的数字的图形。主
我们如何使用JGit确定数字背后的数字?
我为此使用了BranchTrackingStatus
类,但我的BranchTrackingStatus
对象始终为null。
以下是我使用的代码
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));
}
}
答案 0 :(得分:5)
BranchTrackingStatus.of()
假设branchName
表示本地分支,可以是其全名(例如refs / heads / master)或其短名称(例如master)。如果找不到给定的null
或者未配置或不存在跟踪分支,则返回branchName
。
要比较两个任意分支,您可以采用BranchTrackingStatus
代码,如下所示:
void calculateDivergence( Ref local, Ref tracking ) throws IOException {
RevWalk walk = new RevWalk( repository );
try {
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 );
} finally {
walk.dispose();
}
}
答案 1 :(得分:1)
您的代码对我来说很好,我把它的一部分添加到jgit-cookbook中作为样本添加它以查看它是否有效。在本地,当远程存储库存在实际差异时,我会看到计数。
请注意BranchTrackingStatus如何工作:它不会执行远程请求并从远程端获取最新提交,但它只会显示本地git存储库在远程跟踪分支上与本地分支相比的含义。
即。您可能需要首先在远程端具有更新的存储库上执行git fetch,以便更新远程存储库的状态,然后只有BranchTrackingStatus才会显示值。