使用Java API从GitHub获取所有提交记录

5

我希望能够使用Java API从GitHub获取所有的提交记录。目前我已经编写了如下的简单代码:

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("sonratestw@gmail.com", "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());
        }
    }
}

我该如何从这个帐户中获取所有提交到仓库的内容?
2个回答

4
使用 Eclipse GitHub Java API,您可以访问类CommitService以获取存储库提交。可以调用方法getCommits(repository)来检索给定存储库的所有提交列表。
打印存储库所有提交的示例代码:
CommitService commitService = new CommitService(client);
for (RepositoryCommit commit : commitService.getCommits(repository)) {
    System.out.println(commit.getCommit().getMessage());
}

你知道我怎么获取提交时间吗? - Peter Penzov
@PeterPenzov 是的,您可以使用 commit.getCommit().getCommitter().getDate()(或者 commit.getCommit().getAuthor().getDate())来检索提交的日期(请参见此处的链接了解作者和提交者之间的区别)。 - Tunaki
最后一个问题。有没有办法获取今天或一段时间范围内的所有提交记录? - Peter Penzov
@PeterPenzov 嗯,我不知道有没有直接的方法来做到这一点。Git API本身提供了一种方式,使用sinceuntil参数。可能可以创建一个子类CommitService并添加一个新的getCommits方法来支持这些参数(就像这里为其他方法所做的那样)。如果您想这样做最好单独提出一个问题。 - Tunaki

1

对于给定的代码仓库,您可以使用JGit的git.log()函数(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);
        }
    }
}

根据你的Eclipse版本,你需要jgit-core maven依赖

<!-- 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>

谢谢,你知道我需要导入哪个Maven依赖吗? - Peter Penzov
@PeterPenzov 是的:jgit-core: https://mvnrepository.com/artifact/org.eclipse.jgit/org.eclipse.jgit - VonC
1
你是怎么把CookbookHelper带到这里的? - Tanmoy Bhattacharjee
@TanmoyBhattacharjee 这是来自 JGit Cookbook 的一个示例:https://github.com/centic9/jgit-cookbook/blob/33b0eaaa5ce9538aaf808a0d9aa4c389973b2cf5/src/main/java/org/dstadler/jgit/porcelain/WalkAllCommits.java#L35-L48。该项目有一个 CookbookHelper 类 https://github.com/centic9/jgit-cookbook/blob/33b0eaaa5ce9538aaf808a0d9aa4c389973b2cf5/src/main/java/org/dstadler/jgit/helper/CookbookHelper.java#L26 - VonC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接