2016-11-14 7 views
4

Я работаю над продуктом на основе Java, для которого функции Git будут интегрированы. Используя одну из функций Git, я добавил 10 файлов в репозиторий Git, выполнив их, выполнив их в одном коммите.Как получить список файлов для фиксации с помощью JGit

Возможно ли повторение вышеуказанного процесса? I.e Поиск списка файлов, переданных как часть фиксации.

Я получил фиксацию с помощью команды git.log(), но я не уверен, как получить список файлов для фиксации.

Пример кода:

Git git = (...); 
Iterable<RevCommit> logs = git.log().call(); 
for(RevCommit commit : logs) { 
    String commitID = commit.getName(); 
    if(commitID != null && !commitID.isEmpty()) { 
    TableItem item = new TableItem(table, SWT.None); 
    item.setText(commitID); 
    // Here I want to get the file list for the commit object 
} 
} 
+0

Просьба уточнить, что такое Git features. Вы имеете в виду [Eclipse JGit] (https://eclipse.org/jgit/) или интеграцию Eclipse IDE Git или что-то еще? –

+0

Да Вы правы Херрманн. Я говорю о JGit. Мне нужен вызов функции, который используется для получения списка файлов, зафиксированного как часть фиксации. –

+0

Тогда покажите нам какой-то код, что вы пробовали? –

ответ

6

Каждый фиксации указывает на дерева что обозначает все файлы, составляющие коммит.

Обратите внимание, что это не только файлы, которые были добавлены, изменены или удалены с помощью данной конкретной фиксации, но все файлы, содержащиеся в этой ревизии.

Чтобы перебрать дерево, вы можете использовать JGit-х TreeWalk:

TreeWalk treeWalk = new TreeWalk(repository); 
treeWalk.reset(commit.getId()); 
while(treeWalk.next()) { 
    String path = treeWalk.getPathString(); 
    // ... 
} 
treeWalk.close(); 

Если вы заинтересованы только в изменениях, которые были записаны с некоторой фиксации, смотрите здесь: Creating Diffs with JGit или здесь: File diff against the last commit with JGit

+1

Я получаю: org.eclipse.jgit.errors.IncorrectObjectTypeException: объект e5acd3dd99bfc09bf93ba4dd2db4a9ddba4c7359 не является деревом. –

+0

Почему еще бы файл находился в промежуточной области, если не был добавлен/изменен или удален? – NimChimpsky

+0

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

-1

Вы можете попробовать:

git diff --stat --name-only ${hash} ${hash}~1 

Или, чтобы увидеть разницу в более широком диапазоне:

git diff --stat --name-only ${hash1} ${hash2} 
+0

Я использую Eclipse IDE для создания моих функций GIT. Мне нужен вызов метода Eclipse JGit, который может получить список файлов определенного коммита. Чтобы я мог показывать список файлов, когда пользователь отправляет запрос с идентификатором фиксации. –