JGit和寻找头部

2022-09-01 11:58:37

我正在尝试使用JGit获得HEAD提交:

val builder = new FileRepositoryBuilder()
val repo = builder.setGitDir(new File("/www/test-repo"))
  .readEnvironment()
  .findGitDir()
  .build()

val walk: RevWalk = new RevWalk(repo, 100)

val head: ObjectId = repo.resolve(Constants.HEAD)
val headCommit: RevCommit = walk.parseCommit(head)

我发现它打开存储库很好,但值设置为。我想知道为什么它找不到HEAD?headnull

我正在阅读此文档:http://wiki.eclipse.org/JGit/User_Guide

存储库的构造就像文档所说的那样,也是如此。我正在使用来自 http://download.eclipse.org/jgit/maven 的最新版本的JGit。RevWalk2.0.0.201206130900-r

我的问题是:我需要在我的代码中更改什么才能让JGit返回实际的实例,而不是像现在这样?RevCommitnull

更新:此代码:

val git = new Git(repo)
val logs: Iterable[RevCommit] = git.log().call().asInstanceOf[Iterable[RevCommit]]

给我这个例外:No HEAD exists and no explicit starting revision was specified

这个例外很奇怪,因为一个简单的告诉我,这意味着存储库中有一个HEAD。我尝试过不同的存储库,我的和来自其他人的。git rev-parse HEAD0b0e8bf2cae9201f30833d93cc248986276a4d75


答案 1

调用 时,您需要指向 Git 元数据目录(可能),而不是工作目录 ()。/www/test-repo/.gitsetGitDir/www/test-repo

我不得不承认我不确定应该做什么,但是我以前遇到过这个问题,并且指定目录有效。findGitDir.git


答案 2

为了完整性,下面是一个完全有效的示例,如何获取 HEAD 提交的哈希值:

public String getHeadName(Repository repo) {
  String result = null;
  try {
    ObjectId id = repo.resolve(Constants.HEAD);
    result = id.getName();
  } catch (IOException e) {
    e.printStackTrace();
  }
  return result;
}

推荐