2017-01-31 11 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 пытается перезаписать существующий каталог. Я знаю, что повторение там бессмысленно, но меня беспокоит то, что 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

У меня есть проблема с этим способом, чтобы создать «не-голый» репозиторий. 'Git.init(). SetDirectory (dirPath) .call()' дает мне «не-голый», но я не нашел способа проверить, был ли репозиторий уже создан. – xetra11

+0

В зависимости от того, что представляет _folder_, вам может потребоваться использовать 'BaseRepositoryBuilder :: setWorkTree()' вместо ':: setGirDir()' В статье, упомянутой в ответе, обсуждается git dir vs. work dir и как определить, существует ли репозиторий был создан по длине. –

0

тест, если репо (каталог) уже существует и обработать его соответствующим образом:

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

Пока вы можете решить проблему этого пользователя, код только ответы не очень полезно для пользователей, которые приходят на этот вопрос в будущем. Измените свой ответ, чтобы объяснить, почему ваш код решает исходную проблему. –