5

I want to get all commits from GitHub using Java API. So far I managed to create this simple code:

import java.io.IOException;
import java.util.List;
import org.eclipse.egit.github.core.Repository;
import org.eclipse.egit.github.core.client.GitHubClient;
import org.eclipse.egit.github.core.service.RepositoryService;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;

public class GithubImplTest
{
    public void testSomeMethod() throws IOException
    {
        GitHubClient client = new GitHubClient();
        client.setCredentials("[email protected]", "sono");

        RepositoryService service = new RepositoryService(client);

        List<Repository> repositories = service.getRepositories();

        for (int i = 0; i < repositories.size(); i++)
        {
            Repository get = repositories.get(i);
            System.out.println("Repository Name: " + get.getName());
        }
    }
}

How I can get all commits into the repository from this account?

2 Answers 2

4

With the Eclipse GitHub Java API you are using, the class CommitService provides access to repository commits. The method getCommits(repository) can be invoked to retrieve the list of all commits for the given repository.

Sample code to print all commits of a repository:

CommitService commitService = new CommitService(client);
for (RepositoryCommit commit : commitService.getCommits(repository)) {
    System.out.println(commit.getCommit().getMessage());
}
Sign up to request clarification or add additional context in comments.

4 Comments

Do you know how I can get time of commit?
@PeterPenzov Yes, you can use commit.getCommit().getCommitter().getDate() (or commit.getCommit().getAuthor().getDate() to retrieve the date at which the commit was made (see here the difference between author and committer).
One last question. Is there a way to get all commits from today or a range of days?
@PeterPenzov Hmm I don't know of a direct way to do that. Git API itself provides a way with the since and until parameter. Could be possible to subclass CommitService and add a new getCommits that supports those parameters (like done here for the others). Best to ask a separate question if you want to do that.
1

For a given repository, you can use JGit git.log() function (LogCommand):

public static void main(String[] args) throws IOException, InvalidRefNameException, GitAPIException {
    try (Repository repository = CookbookHelper.openJGitCookbookRepository()) {
        try (Git git = new Git(repository)) {
            Iterable<RevCommit> commits = git.log().all().call();
            int count = 0;
            for (RevCommit commit : commits) {
                System.out.println("LogCommit: " + commit);
                count++;
            }
            System.out.println(count);
        }
    }
}

Depending on your Eclipse version, you would need the jgit-core maven dependency:

<!-- https://mvnrepository.com/artifact/org.eclipse.jgit/org.eclipse.jgit -->
<dependency>
    <groupId>org.eclipse.jgit</groupId>
    <artifactId>org.eclipse.jgit</artifactId>
    <version>4.4.1.201607150455-r</version>
</dependency>

4 Comments

Thanks, do you know what maven dependency I need to import?
how did you get the CookbookHelper here ?
@TanmoyBhattacharjee That is an example from JGit Cookbook: github.com/centic9/jgit-cookbook/blob/…. That project has a CookbookHelper class github.com/centic9/jgit-cookbook/blob/…

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.