JGit授权问题[导致原因:org.eclipse.jgit.api.errors.TransportException:https://github.com/... .git:未授权]

lzfw57am  于 2023-04-04  发布在  Git
关注(0)|答案(1)|浏览(525)

我非常非常简单的测试代码总是失败,我不能访问我自己的仓库(私人)(它是完全新的和空的).用户名和密码是完美的工作我测试了登录和退出几次.我经历了几个StackOverflow帖子,但仍然没有线索什么可以导致问题.我已经厌倦了两种不同的方式首先克隆repo(此时给予凭据),然后推送。我的第二次尝试是创建一个repo提交一些东西而不是推送(此时提供凭据)。这些都不起作用。
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();

你知道这是怎么回事吗?

ccrfmcuu

ccrfmcuu1#

根据Github:“* 对于开发人员,如果您今天使用密码在www.example.com上验证Git操作GitHub.com,则必须在2021年8月13日之前开始使用HTTPS(推荐)或SSH密钥上的个人访问令牌,以避免中断。如果您收到警告称您正在使用过时的第三方集成,则应将客户端更新到最新版本。*”此处说明
因此,我不得不生成一个令牌,我是这样做的:A personal access token (classic) generation...
之后,在setCredentialsProvider()方法中,我给出了以下内容:

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

密码必须为空,只需给予令牌即可。

相关问题