2017-01-31 4 views
0

속성 파일을 읽고 밖으로 폴더를 만들고 해당 URL에서 저장소를 가져 오는 도구를 개발하려고합니다. JGit을 사용하여 저장소에서 복제본을 복제하는 도구를 만듭니다.

사실 나는 그것이 폴더/하위 폴더를 만들 수 있습니다과에 하나 개의 프로젝트를 복제 관리 :

File repoOne = new File("repositories/repo1"); 
Git git = Git.cloneRepository() 
     .setURI("https://github.com/xetra11/renderay.git") 
     .setDirectory(repoOne) 
     .call(); 

나는이에게 나는 다음과 같은 오류 메시지가 나타납니다 두 번째로 실행하면 :

Exception in thread "main" org.eclipse.jgit.api.errors.JGitInternalException: Destination path "repo1" already exists and is not an empty directory 

을 왜 JGit이 기존 디렉토리를 덮어 쓰려고하는지 이해하지 못합니다. 나는 그곳에 recloning하는 것이 무의미하다는 것을 안다.하지만 JGit이이 폴더로 "옮겨 가서"명령을 실행하는 것이 아니다. 이미 기존 저장소에 FetchCommand을 실행하려고합니다. 현재 상태에서 JGit은 항상 디렉토리가 이미 있음을 알리는 것으로 가정합니다.

어떤 아이디어가 있다면 폴더에 명령을 단순히 실행시키는 방법은 있습니까?

답변

1

는 클론의 로컬 대상으로 폴더를 사용하려면 어느 없거나 비워 둘 수 없습니다.

주어진 폴더에 저장소가 있는지 검색 한 다음 새 변경 사항 만 가져오고 그렇지 않으면 복제하십시오. 저장소의 존재 여부에 따라

FileRepositoryBuilder repositoryBuilder = new FileRepositoryBuilder(); 
repositoryBuilder.setGitDir(folder); 
Repository repository = repositoryBuilder.build(); 
boolean repositoryExists = repository.getRef("HEAD") != null); 

이제 중 하나를 수행 할 수 있습니다 복제 또는 가져 오기 : 저장소가 존재하는지 결정하기 위해

은이 코드를 사용합니다. 여기에서 볼 JGit와 저장소에 액세스하는 방법에 대한 자세한 설명은

: http://www.codeaffine.com/2014/09/22/access-git-repository-with-jgit/

+0

"비 - 베어 (non-bare)"저장소를 실제로 만들려면이 방법으로 문제가 있습니다. 'Git.init(). setDirectory (dirPath) .call()'은 나에게 "비 - 베어"를 제공하지만 저장소가 이미 생성되었는지 확인하는 방법을 찾지 못했습니다. – xetra11

+0

_folder_가 나타내는 내용에 따라':: setGirDir()'대신'BaseRepositoryBuilder :: setWorkTree()'를 사용해야 할 수도 있습니다.이 기사에서 언급 한 기사에서는 git dir과 work dir에 대해 논의하고 저장소 길이가 만들어졌습니다. –

0

테스트 REPO (디렉토리)가 이미 존재하고 적절하게 처리 할 경우 :

File repoOne = new File("repositories/repo1"); 
if (repoOne.exists()) { 
    // Check if it's a repo or do something else. 
} else { 
    // Repository doesn't exist, create it. 
} 
+3

을이 사용자의 문제를 해결 한 수 있지만은, 코드 전용 답변은 나중에이 질문에 와서 사용자에게 매우 도움이되지 않습니다. 코드가 원래의 문제를 해결하는 이유를 설명하기 위해 답을 편집하십시오. –