Как получить результат для git diff a.txt b.txt для файлов, a.txt и b.txt, которые не являются частью репозитория? Я хочу, чтобы результат был в формате git diff. Кроме того, я не могу запускать команды git через java из-за некоторых ограничений.Эквивалент git diff в jgit
0
A
ответ
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();
}
Смежные вопросы
- 1. Как сделать эквивалент «git diff -name-status» с jgit?
- 2. grit-эквивалент git diff
- 3. LibGit2Sharp эквивалент git diff --stat
- 4. Эквивалент git diff --unified = 0 с libgit2sharp?
- 5. Git локальные изменения/сравнения/JGIT
- 6. Как вы выполняете эквивалент «git show tagname» с JGit?
- 7. Как использовать JGit, чтобы сделать эквивалент «git push --mirror ...»?
- 8. Как сделать эквивалент «git remote update» с jgit?
- 9. Как архивировать файлы diff между двумя commit с jgit?
- 10. git archive remote с JGit
- 11. Использование JGit и CLI git
- 12. Git diff в резюме?
- 13. Что означает выход «diff -git» в «git diff»?
- 14. gitpython эквивалент git-apply
- 15. Как работает слияние в JGit?
- 16. Дата фиксации файла в JGit
- 17. git и jgit, совершающие разницу: git требует электронной почты, в то время как jgit не
- 18. Список удаленных изменений в репозитории git с использованием JGit (реальный diff)
- 19. git эквивалент hg -R?
- 20. git diff --word-diff с файлами oneline
- 21. Как заставить diff работать как git-diff?
- 22. Использование родного git not jgit в Eclipse git?
- 23. Git Revision Diff
- 24. Перейти через git diff
- 25. Странный git diff иногда
- 26. Git: Diff список файлов
- 27. Git diff without clone
- 28. Интерпретация git diff output
- 29. Странное поведение git diff
- 30. Git Diff модель
Можете ли вы предоставить более подробную информацию о настройке? git diff основан на unix-программе 'diff', которая очень хорошо подходит для разграничения двух файлов, не находящихся в репозитории. Наверное, это вариант? –
Машина, на которой я работаю, я не могу запускать команды git, но если у jgit есть способ достичь этого, это будет возможно для меня. –
Я вижу, что вы новичок в SO. Если вы чувствуете, что ответ решил проблему, отметьте ее как «принятую», нажав зеленую галочку. Это помогает сосредоточиться на старых постах, у которых до сих пор нет ответов. –