Возможно ли разрешить дату и время, когда определенный файл был зафиксирован в первый раз с использованием JGit?Дата фиксации файла в JGit
Гит эквивалент будет листинг первой фиксации, как:
git log --format=%aD <FILE> | tail -1
Возможно ли разрешить дату и время, когда определенный файл был зафиксирован в первый раз с использованием JGit?Дата фиксации файла в JGit
Гит эквивалент будет листинг первой фиксации, как:
git log --format=%aD <FILE> | tail -1
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 для более подробной информации.
Похоже, что «file.txt» недостаточно, но также следует указать путь, начиная с корневой папки Repo (например, если файл находится по адресу /src/file.txt, путь «src» /file.txt ". После этого добавление commit.getCommitTime() выполнило трюк. Спасибо за ваш ответ! –
Jarzka
Конечно, нужно указать полный (репозиторий-относительный) путь. Спасибо, что указали это. пояснил ответ. –