2014-11-13 4 views
0

Возможно ли разрешить дату и время, когда определенный файл был зафиксирован в первый раз с использованием JGit?Дата фиксации файла в JGit

Гит эквивалент будет листинг первой фиксации, как:

git log --format=%aD <FILE> | tail -1 

ответ

2

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

RevWalk revWalk = new RevWalk(repository); 
revWalk.markStart(revWalk.parseCommit(repository.resolve(Constants.HEAD))); 
revWalk.setTreeFilter(PathFilter.create("path/to/file.txt")); 
revWalk.sort(RevSort.COMMIT_TIME_DESC); 
revWalk.sort(RevSort.REVERSE, true); 
RevCommit commit = revWalk.next(); 
... 
revWalk.dispose(); 

В Например, история начинается с HEAD. Отрегулируйте markStart(), чтобы начать старт из другого места или вызвать markStart() несколько раз, чтобы включить несколько стартовых точек.

PathFilter исключает коммиты, которые не содержат данное относительное имя пути к репозиторию. И, наконец, два звонка sort() заботятся о том, чтобы коммиты упорядочивались по их отметке времени (в первую очередь первой) в обратном порядке. Следовательно, самая старая фиксация, содержащая данный файл, возвращается next().

Следует иметь в виду, что фиксация, переданная в markStart(), должна быть выполнена из одного и того же ходома версии, то есть должна быть получена с вызовом parseCommit() из того же экземпляра revWalk. См. Также this thread для более подробной информации.

+0

Похоже, что «file.txt» недостаточно, но также следует указать путь, начиная с корневой папки Repo (например, если файл находится по адресу /src/file.txt, путь «src» /file.txt ". После этого добавление commit.getCommitTime() выполнило трюк. Спасибо за ваш ответ! – Jarzka

+0

Конечно, нужно указать полный (репозиторий-относительный) путь. Спасибо, что указали это. пояснил ответ. –

Смежные вопросы