JGit 授权问题 [引起:org.eclipse.jgit.api.errors.TransportException: https://github.com/ ... .git: 未授权]

问题描述 投票:0回答:2

我非常非常简单的测试代码总是失败。我无法访问我自己的存储库(私人)(它是全新的且空的)。用户名和密码工作正常,我测试了多次登录和退出。我浏览了几篇 StackOverflow 帖子,但仍然不知道是什么导致了这个问题。我已经厌倦了两种不同的方式,首先克隆存储库(此时提供凭据),然后推送。我的第二次尝试是创建一个存储库,提交一些内容而不是推送(此时提供凭据)。这些都不起作用。

JGit 错误消息:

Exception in thread "main" org.eclipse.jgit.api.errors.TransportException: https://github.com/USERNAME/testing.git: not authorized
    at org.eclipse.jgit.api.FetchCommand.call(FetchCommand.java:249)
    at org.eclipse.jgit.api.CloneCommand.fetch(CloneCommand.java:325)
    at org.eclipse.jgit.api.CloneCommand.call(CloneCommand.java:191) 

Java代码(第一种方式):

    public static void main(String[] args) throws GitAPIException, IOException {

        CredentialsProvider credentialsProvider
                = new UsernamePasswordCredentialsProvider( "XXXXXXXXXX", "XXXXXXXXXX" );
        Git git = Git.cloneRepository()
                .setURI( "XXXXXXXXXX" )
                .setDirectory(new File(System.getProperty("user.home") + File.separator + "git_test"))
                .setCredentialsProvider( credentialsProvider )
                .call();

        File file = new File( git.getRepository().getWorkTree(), "file" + new Object().hashCode() );
        file.createNewFile();
        git.add().addFilepattern( file.getName() ).call();
        git.commit().setMessage( "Add file " + file.getName() ).call();

        git.push()
                .setCredentialsProvider( credentialsProvider )
                .call();
    }
}

Java代码(第二种方式):

this.git = Git.init().setDirectory(new File(folderPath)).call();

this.git.add().addFilepattern("temp.txt").call();
        this.git.commit().setMessage("Modified temp.txt").call();

this.git.push().setRemote(textfield.getText())
               .setCredentialsProvider(new UsernamePasswordCredentialsProvider("XXXXXXX", "XXXXXX"))
               .call();

你知道发生了什么事吗?

java git authorization jgit
2个回答
3
投票

根据Github: “对于开发人员来说,如果您今天使用密码来验证 GitHub.com 上的 Git 操作,则必须在 2021 年 8 月 13 日之前开始通过 HTTPS(推荐)或 SSH 密钥使用个人访问令牌,以避免中断。如果您收到警告您正在使用过时的第三方集成,您应该将客户端更新到最新版本。此处描述

因此,我必须生成一个令牌,我按以下方式执行操作: 个人访问令牌(经典)生成...

之后,在 setCredentialsProvider() 方法中我给出了以下内容:

.setCredentialsProvider( new UsernamePasswordCredentialsProvider( "<token>", "" ) );

密码必须留空,只需提供令牌即可。


0
投票

您可以尝试将凭据嵌入到 URI 中。以下作品

UsernamePasswordCredentialsProvider cr = new UsernamePasswordCredentialsProvider("username", "password");
        
Git.cloneRepository()
                .setURI("https://{username}:{pasword}@https://github.com/eclipse/jgit.git")
                .setCredentialsProvider(cr).setDirectory(new File("/path/to/checkout"))
                .setBranchesToClone(Arrays.asList("refs/heads/branch-name")).setBranch("branch-name").call();
© www.soinside.com 2019 - 2024. All rights reserved.