使用JGit操作git推送本地文件夹到远程仓库

  • springboot环境
1、pom.xml文件添加依赖
        
			org.eclipse.jgit
			org.eclipse.jgit
			6.5.0.202303070854-r
		

2、实现代码

/**
     * 项目发布功能
     * @param serviceInDto serviceInDto
     * @return Frtg0011ServiceOutDto
     */
    @Override
    public Frtg0011ServiceOutDto releaseProject(Frtg0011ServiceInDto serviceInDto) {
        Frtg0011ServiceOutDto serviceOutDto = new Frtg0011ServiceOutDto();
        FrtgConfigEntity configEntity = new FrtgConfigEntity();
        BeanUtils.copyProperties(serviceInDto, configEntity);

        //从这往下是有效代码
        //本地项目部分路径
        String basePath = commonEnv.getFrtgServerRoot() + "\\" + serviceInDto.getProjectId() + "\\"
                + serviceInDto.getProjectCaseId() + "\\" + serviceInDto.getStageId();
        //避免查询结果为空导致空指针异常
        Optional configOpt = Optional.ofNullable(frtgConfigBaseMapper.select(configEntity));
        configOpt.ifPresent(config -> {
//            String frameType = config.getFrameType();
            //项目文件夹路径  + TYPE_PROJECT_NAME.get(frameType);
            String projectPath = basePath;
            File f = new File(projectPath);
            //如果本地文件夹为空则结束处理
            if(!f.isDirectory() || f.length() < 0) {
                return;
            }
            Git git = null;
            try {
                //初始化本地文件夹(相当于生成一个本地仓库),会在本地文件夹生成一个.git文件
                git = Git.init().setDirectory(new File(projectPath)).call();
                // 将新文件添加到暂存区;addFilepattern(".")表示添加文件夹下所有文件
                git.add().addFilepattern(".").call();
                // 提交更改到本地仓库
                git.commit().setMessage("Initial commit").call();
            } catch (GitAPIException e) {
                throw new RuntimeException("git commit failure");
            }

            //远程仓库地址
            String remoteUrl = config.getSvnRoot();
            //git用户名密码
            String username = config.getUser();
            String password = config.getPassword();
            //git分支
            String branch = "master";

            // 添加远程仓库并推送
            try {
                git.remoteAdd().setName("origin").setUri(new URIish(remoteUrl)).call();
                //push之前必须先pull,否则可能会有冲突,导致push操作不成功
                git.pull()
                        .setCredentialsProvider(new UsernamePasswordCredentialsProvider(username, password))
                        .call();
                git.push()
                        .setCredentialsProvider(new UsernamePasswordCredentialsProvider(username, password))
                        .setRemote("origin")
                        //分支信息,.git文件夹下有一个config文件可以看到相关信息
                        .setRefSpecs(new RefSpec("refs/heads/" + branch + ":refs/heads/" + branch))
                        .call();
            } catch(GitAPIException | URISyntaxException e){
                System.out.println(e.getMessage());
            }
            git.close();
        });
        return serviceOutDto;
    }

3、代码问题

  • projectPath是本地需要上传的文件/文件夹路径 
  • remoteUrl 是远程仓库地址建议在浏览器打开网址验证一下是否可以访问
  • username、password是git账号密码
  • branch是远程仓库的分支,默认会上传到master
  • 我的配置信息是存在数据库的,所以有查询语句,大家根据自己的需求修改
  • 以上代码仅限于上传本地文件到远程仓库的master分支,暂不支持其他分支提交,场景是我在远程仓库新建一个分支,通过这份代码提交时会出来找不到该分支得问题,找了资料是远程跟本地没同步数据的问题,后续解决了会更新
  • 代码提交到远程仓库成功与否跟远程仓库权限是有关系得,我测试的时候使用的是公开得库,私人库应该会有账号权限问题

你可能感兴趣的:(Git相关,git)