jgit获取分支间差异代码

905 阅读1分钟

jgit依赖导入

<!--git操作-->
<dependency>
  <groupId>org.eclipse.jgit</groupId>
  <artifactId>org.eclipse.jgit</artifactId>
  <version>5.5.0.201909110433-r</version>
</dependency>

打开本地git仓库

gitPath="F:\Code\test"; //git仓库地址
Git git = Git.open(new File(gitPath));
Repository repository = git.getRepository();

分别根据当前分支和master分支获取对象id

//方法1:根据分支名称获取
String currentBranch = repository.getBranch();
ObjectId branchObjId = repository.resolve(currentBranch);

//方法2:通过当前分支的引用获得
Ref ref= repository.findRef(currentBranch);
ObjectId objId =  ref.getObjectId();

//获取master分支的objectID
ObjectId masterBranchObjId = repository.resolve("master")

分别获取当前分支和master分支的RevCommit

//当前分支
RevWalk revWalk = new RevWalk(repository);
RevCommit revCommit = revWalk.parseCommit(branchObjId);

//master分支
RevCommit revCommitMaster = revWalk.parseCommit(masterBranchObjId);

prepareTreeParser

//from the commit we can build the tree which allows us to construct the TreeParser
//当前分支信息
RevTree revTree = revCommit.getTree();
ObjectReader objReader = repository.newObjectReader();
CanonicalTreeParser currentBranchTreeParser = new CanonicalTreeParser();
currentBranchTreeParser.reset(objReader,revTree.getId());

//master分支信息
RevTree revTreeMaster = revCommitMaster.getTree();
CanonicalTreeParser masterBranchTreeParser = new CanonicalTreeParser();
masterBranchTreeParser.reset(objReader,revTreeMaster.getId());
revWalk.dispose();

调用diff获取差异信息

List<DiffEntry> diffEntryList = git.diff().setOldTree(masterBranchTreeParser).setNewTree(currentBranchTreeParser).setShowNameAndStatusOnly(true).call();