相当于 JGit 中的 git diff
Equivalent of git diff in JGit
如何获取 git diff a.txt b.txt
文件 a.txt 和 b.txt 的结果,这些文件不是存储库的一部分?
我想要 git diff 提供的格式的输出。此外,由于某些限制,我无法通过 Java 运行 git 命令。
JGit 差异代码位于 DiffFormatter
及其关联的 类 中。如果仔细观察,您会发现代码并不是要区分任意字节流。它通过提交、树等耦合到现有存储库
如果您不介意文件名错误,可以使用此解决方法:
1) 创建临时存储库
2) 使用包含 a.txt
内容的单个文件(名为 ab.txt
)创建提交
3) 使用单个文件创建另一个提交 - 名称与上述文件相同 - 包含 b.txt
的内容
4) 现在你可以使用 JGit 来区分两个提交
示例代码:
File file = new File( git.getRepository().getWorkTree(), "ab.txt" );
writeFile( file, "line1\n" );
RevCommit oldCommit = commitChanges();
writeFile( file, "line1\nline2\n" );
RevCommit newCommit = commitChanges();
ObjectReader reader = git.getRepository().newObjectReader();
CanonicalTreeParser oldTreeIter = new CanonicalTreeParser();
oldTreeIter.reset( reader, oldCommit.getTree() );
CanonicalTreeParser newTreeIter = new CanonicalTreeParser();
newTreeIter.reset( reader, newCommit.getTree() );
DiffFormatter diffFormatter = new DiffFormatter( System.out );
diffFormatter.setRepository( git.getRepository() );
List<DiffEntry> entries = diffFormatter.scan( newTreeIter, oldTreeIter );
diffFormatter.format( entries );
diffFormatter.close();
private RevCommit commitChanges() throws GitAPIException {
git.add().addFilepattern( "." ).call();
return git.commit().setMessage( "commit message" ).call();
}
private static void writeFile( File file, String content ) throws IOException {
FileOutputStream outputStream = new FileOutputStream( file );
outputStream.write( content.getBytes( "UTF-8" ) );
outputStream.close();
}
如何获取 git diff a.txt b.txt
文件 a.txt 和 b.txt 的结果,这些文件不是存储库的一部分?
我想要 git diff 提供的格式的输出。此外,由于某些限制,我无法通过 Java 运行 git 命令。
JGit 差异代码位于 DiffFormatter
及其关联的 类 中。如果仔细观察,您会发现代码并不是要区分任意字节流。它通过提交、树等耦合到现有存储库
如果您不介意文件名错误,可以使用此解决方法:
1) 创建临时存储库
2) 使用包含 a.txt
ab.txt
)创建提交
3) 使用单个文件创建另一个提交 - 名称与上述文件相同 - 包含 b.txt
4) 现在你可以使用 JGit 来区分两个提交
示例代码:
File file = new File( git.getRepository().getWorkTree(), "ab.txt" );
writeFile( file, "line1\n" );
RevCommit oldCommit = commitChanges();
writeFile( file, "line1\nline2\n" );
RevCommit newCommit = commitChanges();
ObjectReader reader = git.getRepository().newObjectReader();
CanonicalTreeParser oldTreeIter = new CanonicalTreeParser();
oldTreeIter.reset( reader, oldCommit.getTree() );
CanonicalTreeParser newTreeIter = new CanonicalTreeParser();
newTreeIter.reset( reader, newCommit.getTree() );
DiffFormatter diffFormatter = new DiffFormatter( System.out );
diffFormatter.setRepository( git.getRepository() );
List<DiffEntry> entries = diffFormatter.scan( newTreeIter, oldTreeIter );
diffFormatter.format( entries );
diffFormatter.close();
private RevCommit commitChanges() throws GitAPIException {
git.add().addFilepattern( "." ).call();
return git.commit().setMessage( "commit message" ).call();
}
private static void writeFile( File file, String content ) throws IOException {
FileOutputStream outputStream = new FileOutputStream( file );
outputStream.write( content.getBytes( "UTF-8" ) );
outputStream.close();
}