使用 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 确定前后提交的数量 的相关文章

  • 如何在 JGit 中“git log --follow ”? (检索完整历史记录,包括重命名)

    我必须如何扩展以下 logCommand 才能获得 follow的选项git log命令工作 Git git new Git myRepository Iterable
  • JGit 克隆存储库

    我正在尝试使用 JGit 克隆 Git 存储库 但遇到 UnsupportedCredentialItem 问题 My code FileRepositoryBuilder builder new FileRepositoryBuilder
  • 从远程 git 存储库获取单个文件

    有没有一种方法可以在 Java 中以编程方式从远程 git 存储库下载单个文件 我更喜欢使用尽可能少的带宽的解决方案 最好只下载单个文件 我不需要浏览存储库 我已经有了文件的路径 我更喜欢不依赖于其他应用程序的解决方案 例如 在计算机上安装
  • jgit 相当于“git merge-base --fork-pointbranchAbranchB”

    git merge base fork pointbranchAbranch 的 jgit 等效代码是什么 我尝试了下面的代码 但没有得到正确的答案 我用它来寻找分支起源 foreach branch git merge base fork
  • Jenkins git-client:如何在 Windows 上迁移到 jgit

    自从詹金斯git client插件已移至使用jgit 配置方面存在很多问题 我见过的所有解决方案都涉及切换回使用旧的 git 命令行 因为现在大多数安装都已到位 以使其在大多数时间都可以工作 我们是同一条船 但是git命令行还是veryWi
  • 如何在 JGit 中编写 git log --stat 命令

    我有以下 git 命令 git log stat 1000 all gt gitstat log 在 JGit 中可以实现这一点吗 如果是 在 JGit 中编写此代码的等效方法是什么 为了访问存储库的历史记录 JGit 提供了RevWalk
  • Spring Cloud配置服务器git连接问题

    连接到存储配置的存储库时 我在 Spring 云配置服务器 Springboot 日志中看到问题 我不确定是否由于凭据或其他原因而无法克隆 不允许 git upload pack 任何对此的指示都会很棒 2021 10 06 22 52 5
  • 如何使用 JGit 获取冲突行

    我正在开发使用 JGit 的应用程序 拉取后 我有冲突的文件 我可以从 List
  • 关闭 JGit 克隆命令的 SSL 验证

    我正在尝试通过以下方式克隆 Git 存储库CloneCommand 有了这段代码 Git cloneRepository setDirectory new File path setURI url call 远程存储库位于使用自签名证书的
  • 如何使用 jgit 进行相当于“git 远程更新”的操作?

    我正在管理使用 mirror 克隆的 git 存储库 并且我需要做一个git remote update使用 JGit 我是否使用 FetchCommand 还是有其他命令 等效的 FetchCommand 是什么git remote up
  • JGit:检索与 git 提交关联的标签

    我想使用 JGit API 检索与特定提交哈希相关的标签 如果有的话 请提供相同的代码片段 Git 对象模型 http book git scm com 1 the git object model html将标签描述为包含有关特定对象的信
  • 使用 JGit 确定前后提交的数量

    在 GitHub 项目中 当我们转到任何分支页面时 我们可以看到描述分支的提前 延迟提交编号的图表 掌握 我们如何使用 JGit 确定数字前面的数字 I used BranchTrackingStatus为此类 但我得到BranchTrac
  • 使用 JGit 从 Git 检索提交消息日志

    我只想从 Git 存储库检索提交日志 其中包含您在特定存储库上完成的所有提交的消息 我找到了一些实现此目的的代码片段 并以异常结束 try FileRepositoryBuilder builder new FileRepositoryBu
  • jgit 如何获取两个日期之间发生的所有提交

    或者只是两个日期之间发生的所有提交 在 SVN 中 你可以做类似的事情svn diff r date date 去做吧 你可以举这个例子JGit测试类RevWalkFilterTest java https github com eclip
  • JGit S3 仅支持标准美国存储桶?

    除了美国标准的 S3 存储桶之外 是否可以使用 JGit 的其他位置 即通过配置文件等 还是我在这里做错了什么 如果我尝试将位于 EU 的 S3 存储桶与 JGit 一起使用 jgit 会抛出错误 gt jgit push origin m
  • 如何使用 JGit 检查 Git 克隆是否已完成

    我学习 git 并使用 JGit 从 java 代码访问 Git 存储库 Git 默认情况下不允许克隆到非空目录 我们如何确定本地计算机中的特定 git 存储库已经完成了 git 克隆 以便我们随后只能执行 Git pull 操作 目前我正
  • Spring Cloud Config - Git 存储库错误

    Spring云配置框架 我正在尝试将java项目中的spring cloud配置与后端存储库集成git这是位桶 基本上 我在不同场合更频繁地遇到两个错误 2020 04 11 17 08 59 265 WARN 2792 main c s
  • Ref 对象的 getPeeledObjectId() 和 getObjectId() 有什么区别?

    我正在使用 jgit api 来实现项目的构建 部署功能 在本地机器中 我通过以下命令通过命令提示符提交了整个源代码 java项目 git add git commit a m Initial Source 这里我得到的提交 ID 为cb9
  • jgit - 基于文件扩展名的 git diff

    我正在使用 JGit API https www eclipse org jgit https www eclipse org jgit 访问 git 存储库 在 git 存储库中 我还存储 txt 文件和其他文件格式 我遇到了一个要求 我
  • 无法使用 File delete() 方法删除 git repo 中的 .pack 文件

    对于我正在编写的这个方法 我使用 jgit 库克隆一个 git 存储库 然后对这些文件执行一些操作 最后我想删除该存储库 我遇到的问题是 当我在 pack 文件 位于 git objects pack 中 上调用 delete 方法时 它无

随机推荐