6

私はjGitとGitの初心者です。Git リポジトリのコミットの履歴を照会しようとしていますが、特定のユーザーのコミットのみを取得したいと考えています。私が見たドキュメントを読むと、RevWalk を使用すると、検索を制限するために RevFilters を追加できるようになります。

まず、Git オブジェクトとそのログ メソッドを使用してコミットを一覧表示すると、非常にうまく機能します。しかし、RevWalk を使用しても何も起こりません。

public static void main(String[] args) throws IOException, GitAPIException {
    FileRepositoryBuilder builder = new FileRepositoryBuilder();
    Repository repository = builder.setGitDir(new File("/home/joan/testGit/testMockito/.git"))
    .readEnvironment().findGitDir().build();

    //This works but I get all the commits
    Git git = new Git(repository);
    Iterable<RevCommit> log = git.log().call();
    for (Iterator<RevCommit> iterator = log.iterator(); iterator.hasNext();) {
        RevCommit rev = iterator.next();
        System.out.println(rev.getAuthorIdent().getName());
        System.out.println(rev.getFullMessage());
    }

    RevWalk walk = new RevWalk(repository);
    for (Iterator<RevCommit> iterator = walk.iterator(); iterator.hasNext();) {
        //It never cames in this block

        RevCommit rev = iterator.next();
        System.out.println(rev.getAuthorIdent().getName());
        System.out.println(rev.getFullMessage());
    }

}

何かアドバイス?私は何か間違ったことをしていますか?

ありがとう。

4

2 に答える 2

11

反復する前にRevWalk呼び出してコミットを追加する必要があります。markStart

たとえばRevWalk、現在のリポジトリのHEADコミットで開始するには:

walk.markStart(walk.parseCommit(repository.resolve("HEAD")));

于 2012-08-08T20:35:03.623 に答える
2

LogCommandfrom を使用しないのはなぜorg.eclipse.jgit.apiですか?

Git git = new Git(db);

Iterable<RevCommit> log = git.log().call();

次に、返されたコミットに基づいて作成者をフィルタリングできます。また、JGit の上位レイヤーである Gitective も参照することをお勧めします。JGit 関連のものを実装する方法を学ぶことができます: https://github.com/kevinsawicki/gitective/

次のようなことができます。

PersonIdent person = new PersonIdent("Chris", "chris@chris.com");

filters.add(new AuthorFilter(person));

そしてCommitFinder、必要なフィルターを使用して...を呼び出すことができます...

于 2012-08-08T19:58:32.093 に答える