git密钥登陆方式-java

383 阅读2分钟

这是我参与8月更文挑战的第19天,活动详情查看:8月更文挑战

对于连接数据库是我们在开发过程中经常要使用到的,但是在java中使用到git的访问你知道用哪个库吗,比如访问git并且切换分支的实现,最近看了些资料,总结了一些简单易用、维护性较强的实现方式,下面就介绍一下 。 最重要是引入这个包

import org.eclipse.jgit.api.Git;

首先是在配置文件中要设定一些参数。 这个git密钥的生成方法就不多讲了,网上有很多的生成方式,提醒需要注意的是,生成的密钥要采用PEM格式才可以,密钥生成就是在主目录下了。

application.properties文件

gitlab.ssh.knownHostsPath=${user.home}/.ssh/known_hosts
gitlab.ssh.identityPath=${user.home}/.ssh/id_rsa_git
 

@Value(value = "${gitlab.ssh.knownHostsPath}")
private String knownHostsPath;

@Value(value = "${gitlab.ssh.identityPath}")
private String identityPath;
 /**
     * ssh-keygen -t rsa -f id_rsa_git -m pem -C xxx@yy.com
     * @param gitUrl
     * @param codePath
     * @param commitId
     * @return
     * @throws GitAPIException
     */
    public Git cloneRepository(String gitUrl, String codePath, String commitId) throws GitAPIException {

        final SshSessionFactory sshSessionFactory = new JschConfigSessionFactory() {
            @Override
            protected void configure(OpenSshConfig.Host host, Session session) {
                session.setConfig("KeyCheckingSSH", "no");
            }

            @Override
            protected JSch createDefaultJSch(FS fs) throws JSchException {
                JSch jSch = super.createDefaultJSch(fs);
                jSch.addIdentity(identityPath);
                jSch.setKnownHosts(knownHostsPath);
                return jSch;
            }
        };

        Git git = Git.cloneRepository()
                .setURI(gitUrl)
                .setTransportConfigCallback(new TransportConfigCallback() {
                    @Override
                    public void configure(Transport transport) {
                        SshTransport sshTransport = (SshTransport) transport;
                        sshTransport.setSshSessionFactory(sshSessionFactory);
                    }
                })
                .setDirectory(new File(codePath))
                .setBranch(commitId)
                .call();
        // 这个方法是切换到指定的commitId,用到JGit包
        checkoutBranch(git, commitId);
        return git;
    }

来看一下这个方法是改写了JschConfigSessionFactory类的这个抽象方法。

protected abstract void configure(Host var1, Session var2);


protected JSch createDefaultJSch(FS fs) throws JSchException {
    JSch jsch = new JSch();
    this.configureJSch(jsch);
    knownHosts(jsch, fs);
    identities(jsch, fs);
    return jsch;
}
JGit

JGit是一个轻量级纯Java的类库,用来实现 Git 的版本控制系统的访问,以及提供核心的版本控制算法。引用到的包有org.eclipse.jgitorg.eclipse.jgit.antorg.eclipse.jgit.http.apache

开源代码下载地址:gitee.com/mirrors/jgi…

或者 mvnrepository.com/artifact/or…

它所实现的功能包括git地址访问、分支拉取、切换等等。 让你想要在java中使用到Git,均可以在这个库里面找到答案。

public CheckoutCommand checkout() {
    return new CheckoutCommand(this.repo);
}