使用 JGit 确定前后提交的数量

2024-01-25

在 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(使用前将#替换为@)

使用 JGit 确定前后提交的数量 的相关文章

随机推荐