使用JGit获取变更细节

栏目: Java · 发布时间: 6年前

内容简介:有时候多个项目在一个代码仓库中,可能每个文件夹都是一个项目。如果每次使用CI自动部署的话就需要判断最近的改动属于哪个文件夹/项目。通过JGit直接获取两个commit之间的diff然后判断是比较直接的方法,具体使用哪两个commit就看需要的。可以使用CI系统上一次成功构建的commit sha,也可以直接使用最近两天的commit的。代码如下:

有时候多个项目在一个代码仓库中,可能每个文件夹都是一个项目。如果每次使用CI自动部署的话就需要判断最近的改动属于哪个文件夹/项目。

通过JGit直接获取两个commit之间的diff然后判断是比较直接的方法,具体使用哪两个commit就看需要的。可以使用CI系统上一次成功构建的commit sha,也可以直接使用最近两天的commit的。

代码如下:

Repository repo = FileRepositoryBuilder.create(new File(basePath + ".git"));
Git git = new Git(repo);
ObjectReader reader = repo.newObjectReader();
ObjectId newObjectId = repo.resolve("HEAD^{tree}");
ObjectId oldObjectId = repo.resolve(successSha + "^{tree}");


System.out.println("Starting diff " + oldObjectId + " : " + newObjectId);

CanonicalTreeParser oldTreeIter = new CanonicalTreeParser();
oldTreeIter.reset(reader, oldObjectId);
CanonicalTreeParser newTreeIter = new CanonicalTreeParser();
newTreeIter.reset(reader, newObjectId);

List<DiffEntry> diffs = git.diff().setNewTree(newTreeIter).setOldTree(oldTreeIter).call();

for (DiffEntry entry : diffs) {
    System.out.println("Entry: " + entry);

    for (String folderName : folderNames) {
        if (entry.getNewPath().contains(folderName) || entry.getOldPath().contains(folderName)) {
            System.out.println("Need deploy folder: " + folderName);
            foldersNeedDeploy.add(folderName);
        }
    }

}

其中的successSha是上一次成功部署过的commit sha值,也可以使用类似HEAD^^^^^的表达式直接使用倒数第四次commit。

如果是Groovy脚本的话需要引入依赖

@Grapes([
        @Grab(group = 'org.eclipse.jgit', module = 'org.eclipse.jgit', version = '5.2.1.201812262042-r')
])

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Landing Page Optimization

Landing Page Optimization

Tim Ash / Wiley Publishing / 2008-1-29 / USD 29.99

在线阅读本书 How much money are you losing because of poor landing page design? In this comprehensive, step-by-step guide, you’ll learn all the skills necessary to dramatically improve your bottom li......一起来看看 《Landing Page Optimization》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具