1. ホーム
  2. java

[解決済み] JGitのPullCommandによる認証

2022-02-19 16:16:06

質問

JGitを使用していて、リモートリポジトリからローカルリポジトリにプルしたいのですが、どうすればいいですか?

最初のアプローチは、リポジトリをクローンすることであり、それはうまくいきました。

CredentialsProvider cp = new UsernamePasswordCredentialsProvider(username, password);
try (Git result = Git.cloneRepository()
    .setURI("http://172.20.1.2/team/myrepo.git")
    .setDirectory(new File("c:\\temp\\gittest"))
    .setCredentialsProvider(cp)
    .call()) {
        System.out.println("Having repository: " + result.getRepository().getDirectory());
    }

しかし、2回目の呼び出しの後、リポジトリは再びクローンされる必要はありません。そのため、私は

Git git = Git.open(new File("c:\\temp\\gittest"));
git.pull().call();

しかし、次のようなエラーが発生します。

org.eclipse.jgit.api.errors.TransportException: http://172.20.1.2/team/myrepo.git: Authentication is required but no CredentialsProvider has been registered

pullコマンドにクレデンシャルを渡せる場所がわかりません。

解決方法を教えてください。

を渡すことができます。 CredentialsProviderPushCommand と同じように CloneCommand .

例えば

CredentialsProvider cp = new UsernamePasswordCredentialsProvider(username, password);
git.pull().setCredentialsProvider(cp).call();

リモートリポジトリに接続するすべてのコマンドは、共通のベースクラスを持っています。 TransportCommand . そして、このクラスは、認証プロバイダを指定する手段を提供します。

JGit での認証についてより詳しく知るには、以下のページも参照してください。 JGit認証の説明 という記事を書きました。