JGit并找到了头

Tow*_*wer 24 java git scala jgit

我正试图通过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)
Run Code Online (Sandbox Code Playgroud)

我发现它打开repo罚款,但head值设置为null.我想知道为什么它找不到HEAD?

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

存储库的构造就像文档所说的RevWalk那样,以及它.我正在使用最新版本的JGit,它2.0.0.201206130900-r来自http://download.eclipse.org/jgit/maven.

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

更新:此代码:

val git = new Git(repo)
val logs: Iterable[RevCommit] = git.log().call().asInstanceOf[Iterable[RevCommit]]
Run Code Online (Sandbox Code Playgroud)

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

异常是奇怪的,因为一个简单的git rev-parse HEAD告诉我0b0e8bf2cae9201f30833d93cc248986276a4d75,这意味着存储库中有一个HEAD.我尝试过不同的存储库,我和其他人.

Tra*_*own 24

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

我不得不承认我不确定findGitDir应该做什么,但我之前遇到过这个问题并指定了.git目录.


cha*_*hao 6

为了完整起见,这里是一个完整的示例,如何获取 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;
}
Run Code Online (Sandbox Code Playgroud)