Последнее изменение файла

1

Я пытаюсь получить как можно больше информации о файлах на Git с JGit.
С getCommitTime я могу получить время, когда файлы были совершены. Можно ли также получить время, когда файл был изменен/обновлен/отредактирован? Я не нашел что-то вроде getModifiedTime.

Теги:
jgit

1 ответ

1
Лучший ответ

Не повезло тебе. Git записывает содержимое файла в объект с именем "blob" и имя файла в древовидном объекте, но не сохраняет записи временных меток, связанных с файлом.

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

Почему это не так плохо

Вероятно, вы используете служебную программу make (или подобное ей) для автоматизации сборки. Как вы знаете, make полагается на модификации меток времени, чтобы выяснить, какие цели (если таковые имеются) должны быть построены.

Представьте себе, что может произойти, если Git записывает (и восстанавливает при проверке) временные метки фиксированных файлов. Предположим, что у вас есть репозиторий с одним отслеживаемым файлом foo, который является единственной зависимостью вызываемой bar:

foo -> bar

Предположим далее, что,

  • ваша история состоит из двух коммитов:

    A -- B [HEAD=master]
    
  • временная метка модификации foo в commit A является "сегодня", 9 утра,

  • временная метка модификации foo в фиксации B является "сегодня", 10:00.

В настоящее время у вас есть фиксация B, и вы запустили make в 10:05, поэтому сборка (bar) в вашем рабочем дереве обновлена. Тем не менее, вы решили, что хотите вернуться к фиксации A, и создать и проверить ветку оттуда (возможно, принять foo в другом направлении):

git checkout -b other HEAD^

Ваше репо теперь выглядит следующим образом

A [HEAD=other]
 \
  B [master]

Если вы запустите make еще раз, для того, чтобы построить версию bar, соответствующий фиксацию A, make бы сравнить модификации тайминг гусеничного и в настоящее время проверили файл foo (9 утра), и что из неотслеживаемого файла bar (10: 05:00), и он сделает вывод о том, что bar обновлен и его не нужно строить снова.

Чтобы заставить make снова создать bar, вам придется touch foo. Это будет хлопоты, и, конечно же, проблема была бы еще хуже, как количество отслеживаемых make зависимости в увеличении проекта.

Так что не так уж плохо, что Git не записывает и не восстанавливает временные метки времени отслеживаемых файлов при оформлении заказа.


Соответствующее чтение:

  • 0
    Downvoter, хотите прокомментировать?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню