2016-10-18 5 views
2

GitLabからJGit経由でクローンを作成できますが、変更を適用するとnot authorizedというエラーメッセージが表示されます。JGit認証エラーでGitLabにプッシュ

さらに3つの重要な詳細:それは読み取り専用アクセス権を持つ問題ではないですので、

  1. 私は、リポジトリを所有しています。

  2. リポジトリはプライベートなので、OAuth 2トークンが有効で、初期クローンで使用されていることがわかります。

  3. 私はユーザー名とoauth2トークンのみを持っています。私は、ユーザーのパスワード、SSHキー、または個人アクセストークンを持っていません。ここで

は、クローニングのための私のコマンドです:ここでは

Git.cloneRepository() 
    .setURI(target) 
    .setDirectory(repoFolder) 
    .setCloneAllBranches(true) 
    .setCredentialsProvider(new UsernamePasswordCredentialsProvider("oauth2", token)) 
    .call(); 

をプッシュするための私のコマンドです:

PushCommand push = cloneSource.push(); 
    push.setRemote(target); 
    push.setPushAll(); 
    push.setCredentialsProvider(new UsernamePasswordCredentialsProvider("oauth2", token)); 
    push.call(); 
+0

のように動作? –

+0

資格プロバイダには実際のユーザー名(URLの一部でもあるユーザー名)を指定する必要があります。 'oauth2'は本当のユーザ名ですか? –

+0

あなたの質問のポイント3は、プッシュのためにあなた自身を認証するのに十分でないことを示しています。 – dlamblin

答えて

2

を以下のスニペットで、私はからクローンを作成することができたし、バックにプッシュしますGitLabリポジトリ。

CredentialsProvider credentialsProvider 
    = new UsernamePasswordCredentialsProvider("myname", "password"); 
Git git = Git.cloneRepository() 
    .setURI("https://gitlab.com/myname/repo.git") 
    .setDirectory(tempFolder.newFolder()) 
    .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(); 

あなたはGitLabのパーソナルアクセストークンを使用している場合、あなたはこのように、がパスワードとしてそれを提供URLにアクセストークンをエンコードする必要があります。たぶん

CredentialsProvider credentialsProvider 
    = new UsernamePasswordCredentialsProvider("myname", "<token>"); 
command.setURI("https://gitlab-ci-token:<token>@gitlab.com/myname/repo.git") 
command.setCredentialsProvider(credentialsProvider) 

その意志「許可されていない」エラーの原因を見つけるのに役立ちます。 SSH経由で通信するには、GitLabプロファイルにSSH鍵を追加する必要があります。

+0

私はこれについて言及しなかったと思いますが、ユーザーのパスワード、SSHキー、個人アクセストークンは持っていません。私がアクセスできる唯一の情報は、ユーザー名とoauth2トークンです。 – user3817808

+0

@ user3817808あなたの環境を再現できるようにGitLabのWeb UIのusernameとoauthトークンがどのように管理されているのか記述できますか? –

+0

ウェブUIからoauthトークンを取得する方法はわかりませんが、このフローにしたがって取得できます:https://docs.gitlab.com/ce/api/oauth2.html PSテストユーザーのユーザー名/パスワードが、私のアプリケーションの他のすべてのユーザーに対しては表示されません。 – user3817808

0

個人のアクセストークンとjgitを使用してgitlabを認証するために、次のスニペットを使用することができます以下のスニペットで

を、私は戻ってGitLabリポジトリにプッシュすることができました。

CredentialsProvider credentialsProvider = new 
    UsernamePasswordCredentialsProvider("PRIVATE-TOKEN", <your oauth token>); 
git.push() 
    .setCredentialsProvider(credentialsProvider) 
    .call(); 

これは、プロトコルクローンを作成してプッシュするために使用しますJgitバージョン(4.8.0.201706111038-R)

関連する問題