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目录.
为了完整起见,这里是一个完整的示例,如何获取 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)