我正在尝试使用jgit的api使用以下代码执行git pull/push
org.eclipse.jgit.api.Git.open(theRepoFile).pull().call()
Run Code Online (Sandbox Code Playgroud)
但我得到例外
JSchException Auth fail
com.jcraft.jsch.Session.connect (Session.java:461)
org.eclipse.jgit.transport.JschConfigSessionFactory.getSession (JschConfigSessionFactory.java:116)
org.eclipse.jgit.transport.SshTransport.getSession (SshTransport.java:121)
org.eclipse.jgit.transport.TransportGitSsh$SshPushConnection.<init> (TransportGitSsh.java:306)
org.eclipse.jgit.transport.TransportGitSsh.openPush (TransportGitSsh.java:152)
org.eclipse.jgit.transport.PushProcess.execute (PushProcess.java:130)
org.eclipse.jgit.transport.Transport.push (Transport.java:1127)
org.eclipse.jgit.api.PushCommand.call (PushCommand.java:153)
Run Code Online (Sandbox Code Playgroud)
即使使用cgit pull and push工作.
我尝试检查SO以获取示例代码
但上面的问题没有提供一个完整的编码示例,说明使用通常通过ssh密钥进行身份验证的远程仓库执行git pull所需的操作.应该有一种方法来获取凭证信息~/.ssh/或等效的窗口.
Ste*_*ler 12
Jsch将自动检测您的SSH密钥,但如果这些密钥受密码保护,则会失败.您需要通过CredentialsProvider指定密码,如下所示:
JschConfigSessionFactory sessionFactory = new JschConfigSessionFactory() {
@Override
protected void configure(OpenSshConfig.Host hc, Session session) {
CredentialsProvider provider = new CredentialsProvider() {
@Override
public boolean isInteractive() {
return false;
}
@Override
public boolean supports(CredentialItem... items) {
return true;
}
@Override
public boolean get(URIish uri, CredentialItem... items) throws UnsupportedCredentialItem {
for (CredentialItem item : items) {
((CredentialItem.StringType) item).setValue("yourpassphrase");
}
return true;
}
};
UserInfo userInfo = new CredentialsProviderUserInfo(session, provider);
session.setUserInfo(userInfo);
}
};
SshSessionFactory.setInstance(sessionFactory);
Run Code Online (Sandbox Code Playgroud)
问题是 Jsch 不支持ssh-agent开箱即用。需要配置https://github.com/ymnk/jsch-agent-proxy才能使其正常工作。
另一种方法是创建您自己的值org.eclipse.jgit.transport.CredentialsProvider并将其设置org.eclipse.jgit.transport.CredentialItem为正确的值(通过向用户请求或查找文件)。您可以CredentialsProvider使用以下命令更改默认值org.eclipse.jgit.transport.CredentialsProvider/setDefault
有关详细信息,请参阅我的 clojure 库 dj: https: //github.com/bmillare/dj/blob/library/src/dj/git.clj
| 归档时间: |
|
| 查看次数: |
7989 次 |
| 最近记录: |