2015-07-09 4 views
0

Как получить результат для git diff a.txt b.txt для файлов, a.txt и b.txt, которые не являются частью репозитория? Я хочу, чтобы результат был в формате git diff. Кроме того, я не могу запускать команды git через java из-за некоторых ограничений.Эквивалент git diff в jgit

+0

Можете ли вы предоставить более подробную информацию о настройке? git diff основан на unix-программе 'diff', которая очень хорошо подходит для разграничения двух файлов, не находящихся в репозитории. Наверное, это вариант? –

+0

Машина, на которой я работаю, я не могу запускать команды git, но если у jgit есть способ достичь этого, это будет возможно для меня. –

+0

Я вижу, что вы новичок в SO. Если вы чувствуете, что ответ решил проблему, отметьте ее как «принятую», нажав зеленую галочку. Это помогает сосредоточиться на старых постах, у которых до сих пор нет ответов. –

ответ

1

Код ошибки JGit находится в DiffFormatter и связанных с ним классах. Если вы подойдете ближе, вы увидите, что код не предназначен для разграничения произвольных байтовых потоков. Он соединен с существующим репозиторием с зафиксируется, деревьев и т.д.

Если вы не возражаете, неправильные имена файлов, вы можете использовать этот обходной путь:

1) создать временный репозиторий

2) создать коммит с одним файлом (с именем ab.txt), который удерживает содержимое a.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(); 
} 
Смежные вопросы