java - JGit 和寻找头部

标签 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)

我发现它可以很好地打开 repo,但是 head 值设置为 null。不知道为什么找不到HEAD?

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

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

我的问题:我需要在我的代码中进行哪些更改才能让 JGit 返回 RevCommit 的实际实例,而不是像现在这样返回 null

更新:此代码:

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

给我这个异常:不存在 HEAD 并且没有指定明确的起始修订版

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

最佳答案

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

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

关于java - JGit 和寻找头部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12342152/

相关文章:

java - 基于时间戳的逐出缓存

java - Android 创建自定义 RecyclerView.Adapter 并从中创建其他类

java - JFileChooser 仅显示 d : drive content

scala - 计算数据库调用所需时间的更好方法是什么?

multithreading - 提高 scala .par 操作的并行级别

java - 在 vaadin 的浏览器中显示文本文件

windows - 如何让 Windows 上的 Git 忽略符号链接(symbolic link)

git - 您如何确保永远不会删除提交?

git - 两个 git 存储库,彼此作为 Remote

scala - 在 Playframework2 中,如何提供多个 Assets 目录?