我即将开发一个工具,用于读取属性文件,然后从中创建文件夹,并从这些URL中提取存储库。
实际上我设法让它创建一个文件夹/子文件夹并将一个项目克隆到其中:
DO
$$
DECLARE rid BIGINT;
BEGIN
ALTER TABLE voters ALTER COLUMN id DROP NOT NULL;
FOR rid IN
SELECT id from decision_realms WHERE id NOT IN (SELECT realm_id FROM voters WHERE realm_id IS NOT NULL)
LOOP
INSERT INTO voters (voter_user_id, max_weight, actual_weight)
SELECT contributor_user_id, pps, pps
FROM contributors WHERE
project_id= (SELECT project_id FROM goals WHERE id=(SELECT goal_id FROM decision_realms WHERE id=rid));
END LOOP;
END
$$
第二次运行时,我收到以下错误消息:
File repoOne = new File("repositories/repo1");
Git git = Git.cloneRepository()
.setURI("https://github.com/xetra11/renderay.git")
.setDirectory(repoOne)
.call();
我真的不明白JGit为什么试图覆盖现有目录。我知道那里的重新克隆是毫无意义的 - 但令我困扰的是,JGit不会只是“移动”到这个文件夹并执行命令。我即将在现有的存储库中执行Exception in thread "main" org.eclipse.jgit.api.errors.JGitInternalException: Destination path "repo1" already exists and is not an empty directory
。在当前状态下,我假设JGit将始终告诉我该目录已经存在。
任何想法如何让他只是在文件夹中执行命令?如果它存在?
答案 0 :(得分: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/
答案 1 :(得分: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.
}