我想获取两个提交(commit)之间更改(添加、修改或删除)的文件路径。
从命令行中,只需输入以下命令:
git diff --name-only abc123..def456
使用JGit有什么等效的方法来实现这个功能?
您可以使用DiffFormatter
来获取DiffEntry
列表。每个条目都有一个changeType,指定文件是添加、删除还是更改的。条目的getOldPath()
和getNewPath()
方法返回路径名。JavaDoc列出了每种更改类型的每个方法返回的内容。
ObjectReader reader = git.getRepository().newObjectReader();
CanonicalTreeParser oldTreeIter = new CanonicalTreeParser();
ObjectId oldTree = git.getRepository().resolve( "HEAD~1^{tree}" );
oldTreeIter.reset( reader, oldTree );
CanonicalTreeParser newTreeIter = new CanonicalTreeParser();
ObjectId newTree = git.getRepository().resolve( "HEAD^{tree}" );
newTreeIter.reset( reader, newTree );
DiffFormatter diffFormatter = new DiffFormatter( DisabledOutputStream.INSTANCE );
diffFormatter.setRepository( git.getRepository() );
List<DiffEntry> entries = diffFormatter.scan( oldTreeIter, newTreeIter );
for( DiffEntry entry : entries ) {
System.out.println( entry.getChangeType() );
}
上述示例列出了 HEAD
与其前一版本之间的更改文件,但可以更改为比较任意提交,如 abc^{tree}
。
oldTree
和newTree
应该被更改。我已经相应地编辑了这篇文章。 - Rüdiger Herrmann