28

私は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値はに設定されていnullます。なぜHEADが見つからないのかしら?

私はこのドキュメントを読んでいます:http ://wiki.eclipse.org/JGit/User_Guide

リポジトリは、ドキュメントに記載されているとおりに構築さRevWalkれます。http://download.eclipse.org/jgit/mavenにある最新バージョンのJGitを使用してい2.0.0.201206130900-rます。

RevCommit私の質問:JGitが現在のようにではなく実際のインスタンスを返すようにするには、コードを何に変更する必要がありnullますか?

更新:このコード:

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

例外は奇妙です。なぜなら、単純なものが私にgit rev-parse HEAD教えてくれる0b0e8bf2cae9201f30833d93cc248986276a4d75からです。つまり、リポジトリにHEADがあるということです。私は、自分のリポジトリと他の人のリポジトリを試しました。

4

4 に答える 4

29

/www/test-repo/.gitを呼び出すときはsetGitDir、作業ディレクトリ()ではなく、Gitメタデータディレクトリ(おそらく)を指す必要があります/www/test-repo

何をすべきかわからないことを認めなければfindGitDirなりませんが、以前にこの問題に遭遇し、.gitディレクトリを指定すると機能しました。

于 2012-09-09T21:57:54.373 に答える
4

完全を期すために、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;
}
于 2016-10-13T13:57:16.370 に答える
3

私にとって(4.5.0.201609210915-rを使用)、解決策は.RepositoryBuilderの代わりに使用することでしFileRepositoryBuilderた。この変更を行うまで、すべてのメソッドが返されていnullました。

rb = new org.eclipse.jgit.lib.RepositoryBuilder()
    .readEnvironment()
    .findGitDir()
    .build();

headRef = rb.getRef(rb.getFullBranch());
headHash = headRef.getObjectId().name();
于 2016-10-02T14:02:05.847 に答える
1

を使用することもできますval git: Git = Git.open( new File( "/www/test-repo" ) )。次に、JGitは指定されたフォルダーをスキャンしてgitメタディレクトリを探します(通常は.git)。このフォルダが見つからない場合は、IOExceptionがスローされます。

于 2016-07-10T21:13:29.810 に答える