1、pom.xml文件添加依赖
<dependency>
<groupId>org.eclipse.jgit</groupId>
<artifactId>org.eclipse.jgit</artifactId>
<version>6.5.0.202303070854-r</version>
</dependency>
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<FrtgConfigEntity> 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分支,暂不支持其他分支提交,场景是我在远程仓库新建一个分支,通过这份代码提交时会出来找不到该分支得问题,找了资料是远程跟本地没同步数据的问题,后续解决了会更新
- 代码提交到远程仓库成功与否跟远程仓库权限是有关系得,我测试的时候使用的是公开得库,私人库应该会有账号权限问题