欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

Java 通过使用 JGit 操作 Git - 二、基本操作

最编程 2024-03-09 16:01:02
...

1、创建仓库推送到远程

本地已存在目录初始化为仓库后推送到远程

cd "/Users/zhimaxingzhe/test"
git init
git remote add origin https://github.com/zhimaxingzhe/test.git
git add .
git commit -m "init"
git push -u origin master
// 初始化本地仓库,标记远程仓库地址 "https://github.com/zhimaxingzhe/test.git"
Git git = Git.init().setDirectory(new File("/Users/zhimaxingzhe/test")).call();
StoredConfig config = git.getRepository().getConfig();
config.setString("remote", "origin", "url", "https://github.com/zhimaxingzhe/test.git");
config.save();
git.commit().setMessage("init").call();
//推到远程仓库
UsernamePasswordCredentialsProvider provider =
                    new UsernamePasswordCredentialsProvider("userName-zhimaxingzhe", password);
git.push().setRemote("origin").setCredentialsProvider(provider)
                    .setRefSpecs(new RefSpec("master")).call();

远程已存在的仓库

git clone https://github.com/zhimaxingzhe/test.git
cd test
touch README.md
git add README.md
git commit -m 'add README.md'
git push -u origin master

对应的,通过JGit是如何操作的呢?直接上代码

// 克隆远程仓库到本地
Git git = Git.cloneRepository().setURI("https://github.com/zhimaxingzhe/test.git").setTimeout(90)
                .setDirectory(new File("/Users/zhimaxingzhe/test"))
                .setCredentialsProvider(provider).call();
// 创建本地文件
FileUtil.touch("/Users/zhimaxingzhe/test"+ "/README.md");
//添加全部文件
git.add().addFilepattern("README.md").call(); 
//提交
git.commit().setMessage("add README").call();
//推到远程仓库
UsernamePasswordCredentialsProvider provider =
                    new UsernamePasswordCredentialsProvider("userName-zhimaxingzhe", password);
git.push().setRemote("origin").setCredentialsProvider(provider)
                    .setRefSpecs(new RefSpec("master")).call();

2、 clone 远端仓库到本地

// 提供用户名和密码的验证
UsernamePasswordCredentialsProvider provider = new UsernamePasswordCredentialsProvider("userName", "password");
// 判断本地目录是否存在
boolean exist = FileUtil.exist("/Users/zhimaxingzhe/");
if (!exist) {
   
    FileUtil.mkdir("/Users/zhimaxingzhe/");
}
// clone 仓库到指定目录
Git git = Git.cloneRepository().setURI(GIT_URL).setDirectory(new File("/Users/zhimaxingzhe/test"))
        .setCredentialsProvider(provider).call();

3、身份认证

上面的例子中都有用到用户名密码做身份验证,所以顺着讲一下身份认证。在做远程仓库操作是需要身份认证,如执行pull、push、clone操作时。和git交互一样,身份认证JGit 支持两种方式,一种是HTTP(S)账号+密码的方式,一种是通过SSH协议使用公钥认证。
HTTP(S)账号+密码:

// 账号 + 密码
UsernamePasswordCredentialsProvider provider = new UsernamePasswordCredentialsProvider("userName-zhimaxingzhe", password);
// 拉取远程更新        
git.pull().setCredentialsProvider(provider).setRemoteBranchName(branchName).call();

SSH协议使用公钥认证:

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

    @Override
    protected JSch createDefaultJSch(FS fs) throws JSchException {
   
        JSch sch = 

推荐阅读