这是我参与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.jgit、org.eclipse.jgit.ant、org.eclipse.jgit.http.apache。
开源代码下载地址:gitee.com/mirrors/jgi…
或者 mvnrepository.com/artifact/or…
它所实现的功能包括git地址访问、分支拉取、切换等等。 让你想要在java中使用到Git,均可以在这个库里面找到答案。
public CheckoutCommand checkout() {
return new CheckoutCommand(this.repo);
}