当我尝试使用JGit api克隆现有的远程git存储库时,出现以下错误。
例外:org。日食jgit。应用程序编程接口。错误。运输例外:http://admin@本地主机:7990/scm/cp/myrepo。git安全连接到https://admin@本地主机:7990/scm/cp/myrepo。由于SSL问题,无法建立git
在我的课堂上,我使用下面的方法来克隆存储库。
public static void cloneRepoTemp(String cloneRepoUrl, String username, String password)
throws FileNotFoundException, IOException {
Git git;
try {
git = Git.cloneRepository().setURI(cloneRepoUrl)
.setCredentialsProvider(new UsernamePasswordCredentialsProvider(username, password))
.setDirectory(new File("C:/temp/testrepo")).setBranch("integration").call();
git.close();
} catch (GitAPIException e) {
System.out.println("Exception:" + e);
}
我知道我可以通过使用下面的命令来解决这个问题,
git config --global http.sslVerify false
但是,由于我使用的是JGit api,我希望通过api本身来启用它,而不是在主机上显式设置。此外,我打算让库分布在多台机器上,所以不要在用户的机器上进行更改,以使我的代码正常工作。
有没有一种方法可以在代码中实现这一点,而无需在git配置文件中添加条目。
也许看看Config类,用Config.set布尔(分支,主,isSslVerify,false)
JGit确实有自己的存储库配置内部表示,它允许您(如@eugène adell所述)更改设置。其可通过存储库获取。getConfig()
。问题是,cloneRepository
命令创建存储库对象,并自动(从您的角度)调用克隆序列(fecth checkout),因此您没有时间更改存储库设置。
为了解决这个问题,我推荐一个穷人的克隆: init-
Repositoryrepo = Git.init().setDirectory(this.tempGitDir.toFile()).call();
repo.getRepository()
.getConfig()
.setBoolean("http", "https://selfsigned.server.com", "sslVerify", false);
URIish u = createURIish();
repo.remoteAdd()
.setName("origin")
.setUri(u)
.call();
repo.pull()
.setCredentialsProvider(new UsernamePasswordCredentialsProvider("token", pat))
.setRemote("origin")
.setRemoteBranchName("master")
.call();
我们首先初始化回购协议,然后更改其sslVerify
设置。注意:总是更喜欢每回购、每服务器sslVerify忽略;全局设置标志是一个安全问题。替换所连接服务器的特定“基本”url的url。
createUrish
方法只是用远程URI创建一个新的Urish对象,我用一个单独的方法来降低复杂性(嵌套的trys):
private URIish createURIish() throws InvalidRemoteException {
URIish u = null;
try {
u = new URIish(this.gitUrl);
} catch (URISyntaxException e) {
throw new InvalidRemoteException(
MessageFormat.format(JGitText.get().invalidURL, this.gitUrl), e);
}
return u;
}
然后添加Urish作为新的远程设备,最后调用pull命令。为此,我使用了一个UsernamePasswordCredentialsProvider
,这样我就可以通过连接到的TFS服务器使用的PAT,但是username:pasword
在您使用时也应该可以。
这里的问题是,URL 被重定向,这在 JGit 中不处理。没有相同的错误报告,并且还提到它们已得到解决,但我仍然面临此问题。如果我做错了什么,请告诉我。 代码片段 运行代码后出现异常 更改以下代码后 例外 详情: 使用以下 JGit 版本 4.8.0.201706111038-r 也尝试了4.4.x.xxxxx版本
问题内容: 我该怎么办 与JGIT库? 问题答案: 您不能,JGit尚不支持客户端上的浅表克隆(不过,它在服务器端上)。
我有一个远程存储库,我试图使用它在本地进行克隆 这对于安装所有包和重新创建都很有效,但是我在最后得到了一个错误,这个错误似乎与Symfony2-中目录结构的变化有关 Sensio\Bundle\分布式包\Composer\ScriptHandler::buildBootstrap Sensio\Bundle\DistributionBundle\Composer\ScriptHandler::cl
问题内容: 我正在按照以下指南使用jGit克隆远程现有存储库: https://github.com/centic9/jgit- cookbook/blob/master/src/main/java/org/dstadler/jgit/porcelain/CloneRemoteRepository.java 我在示例中使用CFML: 克隆的效果很好,但是在我停止Java进程之前,文件锁不会释放在其
我试图克隆一个包含一个大文件(2GB以上)的存储库,因为本文提到Jgit可以处理的文件的最大大小是2GB。我看到通过pure git命令,我可以使用过滤大文件,现在我希望在使用Jgit的java代码中实现这个过滤器,这样我就可以避免异常目前我使用Jgit进行克隆,如下所示: 我想知道是否有选项添加过滤器到克隆,这样它就可以避免使用JGIT克隆大文件?
下面的示例显示了如何列出远程标记,而无需克隆repo: 如何像上面的例子一样远程编辑/添加/删除新标签,而无需克隆存储库? 需要克隆回购协议。 有没有办法在不克隆回购协议的情况下实现这一点?