2017-01-31 57 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與工作目錄以及如何檢測存儲庫被創造了長度。 –

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

雖然你可能已經解決了這個用戶的問題,唯一的代碼,答案是沒有誰前來的未來這個問題的用戶非常有幫助。請編輯您的答案,以解釋爲什麼您的代碼可以解決原始問題。 –