2015-06-17 2 views
0

Это может быть дубликат, но я не вижу никакого решения или надлежащей документации или примера. Я пытаюсь загрузить репозиторий Git Hub на свою локальную машину. Следующее - это то, что я пробовал. Я использую org.kohsuke.github API. Я не вижу подходящего метода для загрузки на локальный.Java GitHub API -org.kohsuke.github Клонирование хранилища для локальной машины

public void cloneRep() { 
    String login = "userid"; 
    String password = "password"; 
    String rep = "repository"; 
    String localDir = "/home/myuser/repository/"; 
    try { 
     System.out.println("Connecting...." + login + " : " + password); 
     GitHub gitHub = GitHub.connectUsingPassword(login, password); 
     boolean isValid = gitHub.isCredentialValid(); 
     System.out.println("is Valid ? " + isValid); 
     if (isValid) { 
      GHRepository repository = gitHub.getRepository(rep); 
      //how to clone the repository to local directory? 
     } 
    } catch (Exception e) { 
     System.out.println("EXCEPTION...."); 
     e.printStackTrace(); 
    } 
} 

Я знаю, что с org.eclipse.jgit.api.Git это возможно.

String remoteUrl = new StringBuffer().append("https").append(login) 
       .append(":").append(password).append("@github.com/") 
       .append(login).append("/").append(rep).toString(); 
org.eclipse.jgit.api.Git.cloneRepository().setURI(remoteUrl).setDirectory(localDir) 
        .call(); 

Но это кажется более сложным. Сначала мне нужно сделать только аутентификацию. И тогда мне нужно скачать на локальный. Мне неинтересно использовать оба. Если API предоставляет лучшее решение, я могу это использовать.

Есть ли решение?

ответ

2

Я мог ошибаться, но org.kohsuke.github API - это манипулирование репозиториями и gists на github. Речь идет не о клонировании репозиториев локально или выполнении других связанных с git действий.

1

JGit уже обсуждается в StackOverflow https://stackoverflow.com/questions/tagged/jgit

получить JGit библиотеки с помощью pom.xml или загрузить файлы JAR вручную

<dependency> 
    <groupId>org.eclipse.jgit</groupId> 
    <artifactId>org.eclipse.jgit</artifactId> 
    <version>4.0.0.201506090130-r</version> 
</dependency> 

И попробуйте этот пример

JGit: Cannot find a tutorial or simple example или, соответственно, следовать url внутри обсуждения

Для аутентификации вы можете использовать CloneCommand с setNoCheckout (true);

import org.eclipse.jgit.api.CloneCommand; 
import org.eclipse.jgit.api.Git; 
import org.eclipse.jgit.api.errors.GitAPIException; 
import org.eclipse.jgit.api.errors.InvalidRemoteException; 
import org.eclipse.jgit.api.errors.TransportException; 
import org.eclipse.jgit.transport.UsernamePasswordCredentialsProvider; 
....... 
CloneCommand cloneCommand = Git.cloneRepository(); 
cloneCommand.setDirectory(new File("C:\\myfolder")); 
cloneCommand.setNoCheckout(true); 
cloneCommand.setRemote("https://github.com/<username>/<repositoru>.git"); 
cloneCommand.setCredentialsProvider(new UsernamePasswordCredentialsProvider("<username>", "<password>")); 
cloneCommand.call(); 

C: \ моя_папка не должен быть создан вручную, он будет создан автоматически

+0

Спасибо. Есть ли способ просто аутентифицироваться? – iCode

+0

Привет, Извините, что он бросает 'JGitInternalException: Целевой путь '.git" уже существует и не является пустым каталогом ", даже если учетные данные верны, и исправление также корректно. – iCode

+1

Фактически он создал пустую папку в моем домашнем каталоге с именем репозитория – iCode

1

Я создал класс утилиты для этого:

import org.apache.commons.io.FileUtils; 
import org.eclipse.jgit.api.Git; 
import org.eclipse.jgit.transport.CredentialsProvider; 
import org.eclipse.jgit.transport.UsernamePasswordCredentialsProvider; 
import org.junit.Test; 
import javax.validation.constraints.NotNull; 
import java.io.File; 
import java.net.URL; 


public class GithubClient { 



/** 
* @param githubRemoteUrl Remote git http url which ends with .git. 
* @param accessToken  Personal access token. 
* @param branchName Name of the branch which should be downloaded 
* @param destinationDir Destination directory where the downloaded files should be present. 
* @return 
* @throws Exception 
*/ 
public boolean downloadRepoContent(@NotNull String githubRemoteUrl, @NotNull String accessToken, @NotNull String branchName, @NotNull String destinationDir) throws Exception { 
    //String githubSourceUrl, String accessToken 
    CredentialsProvider credentialsProvider = new UsernamePasswordCredentialsProvider(accessToken, ""); 
    URL fileUrl = new URL("file://"+destinationDir); 
    File destinationFile = FileUtils.toFile(fileUrl); 
    //delete any existing file 
    FileUtils.deleteDirectory(destinationFile); 
    Git.cloneRepository().setURI(githubSourceUrl) 
      .setBranch(branchName) 
      .setDirectory(destinationFile) 
      .setCredentialsProvider(credentialsProvider) 
      .call(); 
    if(destinationFile.length() > 0){ 
     return true; 
    }else{ 
     return false; 
    } 
    } 
}