Клонирование PR с использованием Java-программы или JGIT - PullRequest
1 голос
/ 21 октября 2019

Я хотел клонировать определенный пул-запрос, используя java JGit API. У кого-нибудь есть идеи по этому поводу? Или любой альтернативный способ клонирования запроса Pull с использованием Java-программы.

Давайте рассмотрим ниже код для извлечения или клонирования PR из GitHub,

1: git clone https://github.com/deepak-kumbhar/spring-boot-logging-example.git
2. cd PROJECT_NAME
3. git fetch origin pull/1/head:pr-1 (Where 1 is number or PR)
4. git checkout pr-1 (To activate the PR)

Та же функциональность, которую я хочу использовать в JGit. У кого-нибудь есть идеи по этому поводу?

Заранее спасибо!

1 Ответ

1 голос
/ 24 октября 2019

Вы можете сделать это, как описано в https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/checking-out-pull-requests-locally

Основные шаги для извлечения PR # 6 из https://github.com/github/testrepo/pull/6/commits:

    System.out.println("Cloning from " + REMOTE_URL + " to " + localPath);
    try (Git result = Git.cloneRepository()
            .setURI(REMOTE_URL)
            .setDirectory(localPath)
            .setProgressMonitor(new SimpleProgressMonitor())
            .call()) {
        // Note: the call() returns an opened repository already which needs to be closed to avoid file handle leaks!
        System.out.println("Having repository: " + result.getRepository().getDirectory());

        FetchResult fetchResult = result.fetch()
                .setRemote(REMOTE_URL)
                .setRefSpecs("+refs/pull/6/head:pr_6")
                .call();

        System.out.println("Result when fetching the PR: " + fetchResult.getMessages());

        Ref checkoutRef = result.checkout()
                .setName("pr_6")
                .call();

        System.out.println("Checked out PR, now printing log, it should include two commits from the PR on top");

        Iterable<RevCommit> logs = result.log()
                .call();
        for (RevCommit rev : logs) {
            System.out.println("Commit: " + rev /* + ", name: " + rev.getName() + ", id: " + rev.getId().getName() */);
        }
    }

См. Готовый кзапустить фрагмент на https://github.com/centic9/jgit-cookbook/blob/master/src/main/java/org/dstadler/jgit/porcelain/CheckoutGitHubPullRequest.java

...