将JGit用于http url克隆远程存储库失败 [英] Cloning remote repository fails using JGit for http url

查看:144
本文介绍了将JGit用于http url克隆远程存储库失败的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这里的问题是,URL被重定向,这在JGit中未处理.没有报告过相同的错误,并且还提到它们已解决,但我仍然面临这个问题.如果我做错了任何事情,请告诉我.

The problem here is, URL is redirected which is not handled in JGit. There are no of bugs reported for same and it is also mentioned that they are resolved but I am still facing this issue. Please let me know if I am doing anything wrong.

代码段

private static Git cloneRepository(String url, String branch, String targetPath) throws IOException {
    Git result = null;
    try {
        CloneCommand cloneCommand = Git.cloneRepository().setCloneSubmodules(true)
                                        .setURI(url).setBranch(branch)
                                        .setCloneSubmodules(true)
                                        .setDirectory(new File(targetPath));
        result = cloneCommand.call();
    } catch (GitAPIException e) {
        e.printStackTrace();
    }
    return result;
}

public static void main(String[] args) throws IOException {
    cloneRepository("http://github.com/google/mathfu", "master", "D:/codebase");
    //cloneRepository("https://github.com/google/mathfu", "master", "D:/codebase");
}

运行代码后出现异常

org.eclipse.jgit.api.errors.TransportException: 'http://github.com/google/mathfu': 301 Moved Permanently
at org.eclipse.jgit.api.FetchCommand.call(FetchCommand.java:245)
at org.eclipse.jgit.api.CloneCommand.fetch(CloneCommand.java:293)
at org.eclipse.jgit.api.CloneCommand.call(CloneCommand.java:190)
at com.acellere.demo.GitDemo.App.cloneRepository(App.java:21)
at com.acellere.demo.GitDemo.App.main(App.java:31)
Caused by: org.eclipse.jgit.errors.TransportException: 'http://github.com/google/mathfu': 301 Moved Permanently
at org.eclipse.jgit.transport.TransportHttp.connect(TransportHttp.java:545)
at org.eclipse.jgit.transport.TransportHttp.openFetch(TransportHttp.java:326)
at org.eclipse.jgit.transport.FetchProcess.executeImp(FetchProcess.java:136)
at org.eclipse.jgit.transport.FetchProcess.execute(FetchProcess.java:122)
at org.eclipse.jgit.transport.Transport.fetch(Transport.java:1236)
at org.eclipse.jgit.api.FetchCommand.call(FetchCommand.java:234)
... 4 more

更改以下代码后

//cloneRepository("http://github.com/google/mathfu", "master", "D:/codebase");
cloneRepository("https://github.com/google/mathfu", "master", "D:/codebase");

例外

org.eclipse.jgit.api.errors.TransportException: 'http://github.com/google/fplutil.git': 301 Moved Permanently
at org.eclipse.jgit.api.FetchCommand.call(FetchCommand.java:245)
at org.eclipse.jgit.api.CloneCommand.fetch(CloneCommand.java:293)
at org.eclipse.jgit.api.CloneCommand.call(CloneCommand.java:190)
at org.eclipse.jgit.api.SubmoduleUpdateCommand.call(SubmoduleUpdateCommand.java:177)
at org.eclipse.jgit.api.CloneCommand.cloneSubmodules(CloneCommand.java:372)
at org.eclipse.jgit.api.CloneCommand.checkout(CloneCommand.java:353)
at org.eclipse.jgit.api.CloneCommand.call(CloneCommand.java:215)
at com.acellere.demo.GitDemo.App.cloneRepository(App.java:16)
at com.acellere.demo.GitDemo.App.main(App.java:25)
Caused by: org.eclipse.jgit.errors.TransportException: 'http://github.com/google/fplutil.git': 301 Moved Permanently
at org.eclipse.jgit.transport.TransportHttp.connect(TransportHttp.java:545)
at org.eclipse.jgit.transport.TransportHttp.openFetch(TransportHttp.java:326)
at org.eclipse.jgit.transport.FetchProcess.executeImp(FetchProcess.java:136)
at org.eclipse.jgit.transport.FetchProcess.execute(FetchProcess.java:122)
at org.eclipse.jgit.transport.Transport.fetch(Transport.java:1236)
at org.eclipse.jgit.api.FetchCommand.call(FetchCommand.java:234)
... 8 more

详细信息:

使用以下JGit版本 4.8.0.201706111038-r

using following JGit version 4.8.0.201706111038-r

也尝试过4.4.x.xxxxx版本

Also tried with version 4.4.x.xxxxx too

推荐答案

进行以下更改:

With this change: https://git.eclipse.org/r/#/c/46261/, that was merged in February 2017, JGit should be able to follow HTTP 301 status codes (moved permanently).

但是,CloneCommand似乎还没有起作用.我可以验证您的代码段是否抛出TransportException.

However, the CloneCommand does not seem to work yet. I can verify that your code snippet throws a TransportException.

可以在此处找到相应的错误报告:

The corresponding bug reports can be found here:

https://bugs.eclipse.org/bugs/show_bug.cgi ?id = 465167 https://bugs.eclipse.org/bugs/show_bug.cgi?id= 474094

我已在错误报告中添加了指向此帖子的评论.

I have added a comment to the bug report that points to this post.

更新2017-08-18:该错误已修复,将在JGit 4.9中发布

Update 2017-08-18: the bug is fixed and will be released in JGit 4.9

这篇关于将JGit用于http url克隆远程存储库失败的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆