gpt4 book ai didi

git - Jgit:如何在 merge 提交中显示更改的文件

转载 作者:行者123 更新时间:2023-12-04 18:01:51 26 4
gpt4 key购买 nike

我想使用 jgit 获取在 merge 提交中更改的文件列表,类似于 git show --name-only 在 git 中所做的。

有很多关于如何为一个父项的正常提交获取更改文件的示例,但它们不适用于多个父项的 merge 提交。

最佳答案

据我了解,您只需要将 merge 提交的父项与其各自父项的差异结合起来即可。

下面的代码片段创建了两个提交,每个提交都添加了一个文件(main.txtside.txt),然后 merge 提交按上述方式比较

public void diffMerge() throws Exception {
RevCommit baseCommit = commitChanges();
Ref sideBranch = git.branchCreate().setName( "side" ).call();
File mainFile = new File( git.getRepository().getWorkTree(), "main.txt" );
mainFile.createNewFile();
RevCommit mainCommit = commitChanges();
git.checkout().setName( sideBranch.getName() ).call();
File sideFile = new File( git.getRepository().getWorkTree(), "side.txt" );
sideFile.createNewFile();
RevCommit sideCommit = commitChanges();
git.checkout().setName( "refs/heads/master" ).call();
ObjectId mergeCommitId = git.merge().include( sideCommit ).call().getNewHead();

DiffFormatter diffFormatter = new DiffFormatter( NullOutputStream.INSTANCE );
diffFormatter.setRepository( git.getRepository() );
RevCommit mergeCommit = parseCommit( mergeCommitId );
List<DiffEntry> mainEntries = diffFormatter.scan( parseCommit( mergeCommit.getParent( 0 ) ).getParent( 0 ), mergeCommit.getParent( 0 ) );
List<DiffEntry> sideEntries = diffFormatter.scan( parseCommit( mergeCommit.getParent( 1 ) ).getParent( 0 ), mergeCommit.getParent( 1 ) );
diffFormatter.close();

mainEntries.forEach( entry -> System.out.println( entry.getNewPath() ) );
sideEntries.forEach( entry -> System.out.println( entry.getNewPath() ) );
}

private RevCommit parseCommit( ObjectId commitId ) throws IOException {
try( RevWalk revWalk = new RevWalk( git.getRepository() ) ) {
return revWalk.parseCommit( commitId );
}
}

private RevCommit commitChanges() throws GitAPIException {
git.add().addFilepattern( "." ).call();
return git.commit().setMessage( "commit message" ).call();
}

请注意,代码盲目地假定 merge 提交的父项本身不是 merge 。

关于git - Jgit:如何在 merge 提交中显示更改的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34025577/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com