Java 与JGit最后一次提交的文件差异

Java 与JGit最后一次提交的文件差异,java,git,jgit,Java,Git,Jgit,我试图使用JGit来获取文件从上次提交到最近未提交更改的差异。我怎样才能用它来做这件事?(使用命令行将是git diff HEAD的输出) 在几次讨论(,)之后,我提供了一段代码,可以找到未受限制的文件,但是我无法得到文件之间的差异 Repository db = new FileRepository("/path/to/git"); Git git = new Git(db); AbstractTreeIterator oldTreeParser = this.prepareTreePars

我试图使用JGit来获取文件从上次提交到最近未提交更改的差异。我怎样才能用它来做这件事?(使用命令行将是git diff HEAD的输出)

在几次讨论(,)之后,我提供了一段代码,可以找到未受限制的文件,但是我无法得到文件之间的差异

Repository db = new FileRepository("/path/to/git");
Git git = new Git(db);

AbstractTreeIterator oldTreeParser = this.prepareTreeParser(db, Constants.HEAD);

List<DiffEntry> diff = git.diff().setOldTree(oldTreeParser).call();

for (DiffEntry entry : diff) {
    System.out.println("Entry: " + entry + ", from: " + entry.getOldId() + ", to: " + entry.getNewId());
    DiffFormatter formatter = new DiffFormatter(System.out);
    formatter.setRepository(db);
    formatter.format(entry);

}

以下设置适用于我:

DiffFormatter formatter = new DiffFormatter( System.out );
formatter.setRepository( git.getRepository() );
AbstractTreeIterator commitTreeIterator = prepareTreeParser( git.getRepository(),  Constants.HEAD );
FileTreeIterator workTreeIterator = new FileTreeIterator( git.getRepository() );
List<DiffEntry> diffEntries = formatter.scan( commitTreeIterator, workTreeIterator );

for( DiffEntry entry : diffEntries ) {
  System.out.println( "Entry: " + entry + ", from: " + entry.getOldId() + ", to: " + entry.getNewId() );
  formatter.format( entry );
}
DiffFormatter formatter=新的DiffFormatter(System.out);
setRepository(git.getRepository());
AbstractTreeIterator commitTreeIterator=prepareTreeParser(git.getRepository(),Constants.HEAD);
FileTreeIterator workTreeIterator=新的FileTreeIterator(git.getRepository());
List differentries=formatter.scan(commitTreeIterator、workTreeIterator);
用于(不同输入:不同输入){
System.out.println(“条目:“+Entry+”,从:“+Entry.getOldId()+”,到:“+Entry.getNewId()”);
格式化程序。格式化(条目);
}

未提交的更改可通过
文件树编辑器
访问。使用
formatter.scan()
而不是
DiffCommand
的优点是格式化程序设置正确,可以处理
FileTreeIterator
。否则,当格式化程序试图从存储库中的工作树中查找更改时,您将得到
MissingObjectException
s。

this.prepareTreeParser()方法的代码丢失。@PavelLobodinský刚刚用我用来获取差异的现有代码进行了更新
DiffFormatter formatter = new DiffFormatter( System.out );
formatter.setRepository( git.getRepository() );
AbstractTreeIterator commitTreeIterator = prepareTreeParser( git.getRepository(),  Constants.HEAD );
FileTreeIterator workTreeIterator = new FileTreeIterator( git.getRepository() );
List<DiffEntry> diffEntries = formatter.scan( commitTreeIterator, workTreeIterator );

for( DiffEntry entry : diffEntries ) {
  System.out.println( "Entry: " + entry + ", from: " + entry.getOldId() + ", to: " + entry.getNewId() );
  formatter.format( entry );
}