Git не хранит файл отметки времени.
Единицей хранения в Git является коммит. commit (в целом) имеет временную метку. Фактически, каждый коммит имеет две метки времени, а именно метку времени автора и метку времени коммиттера. Эти две метки времени являются частью метаданных коммита. И, конечно же, коммит сохраняет снимок всех ваших файлов. Но это всех ваших файлов, без отметок времени.
Это означает, что ответом на вопрос в вашем заголовке является оглушительный нет . Даже если Git сам установит временные метки для файлов (это не так), вы не сможете заставить его установить временную метку на file2
без того, чтобы он также установил ее на file1
(потому что либо вы установите все метки времени для всех файлов из метки времени автора или коммиттера, или - поскольку Git действительно работает сегодня - вы не установили бы ни одну из них ни для каких файлов). В коммите есть только две отметки времени, и если вы собираетесь их применять, как вы узнаете, какие файлы должны их получать?
Способ, которым базовая операционная система видит обновления отметок времени в ваши файлы в вашем рабочем дереве таковы: когда ваш Git передает git checkout
или git switch
, чтобы перейти от того, что у вас есть сейчас, к любому другому, который вы делаете ' Хотелось бы, чтобы ваш Git заметил, что это требует замены содержимого некоторых файлов (и, возможно, удаления некоторых файлов и создания некоторых файлов). Таким образом, Git заменяет содержимое этих файлов и / или удаляет и / или создает некоторые файлы по мере необходимости. Это действие заставляет вашу операционную систему изменять временные метки этих файлов.
Система сборки CI может работать или не работать одинаково. Некоторые системы CI могут хранить в рабочем дереве файлы из предыдущей сборки; другие могут этого не делать. 1 В любом случае вы не можете получить Git для установки таких отметок даты. 2 Вам придется найти другой способ иметь дело с вашей системой CI.
(Если ваша система CI имеет стандартное рабочее дерево, вы можете заставить его обновить свою копию рабочего дерева file2
, изменив file2
так что Git должен извлечь его при изменении фиксации. Но это то, что вы сказали, что сделали не хотите.)
1 Это кажется довольно распространенным в этих системах сборки не сохраняют рабочее дерево и вместо этого запускают git diff
для сравнения содержимого файла с ранее созданным, но давно удаленным, рабочее дерево к этому в предложенной новой сборке, которая была извлечена в рабочее дерево fre sh. Если содержимое файлов определенных файлов изменилось, эти файлы восстанавливаются. Например, некоторые установки Jenkins делают это вручную. Базель, по-видимому, формализует это, вычисляя контрольные суммы ha sh и сравнивая контрольные суммы: если контрольная сумма совпадает с предыдущей сборкой, она просто повторно использует артефакты предыдущей сборки.
2 Люди написали различные Git перехватывают, которые go пересекают и влияют на владение файлом и / или разрешения, например, на основе содержимого зафиксированного файла. Эту технику также можно использовать для установки меток времени ОС. Но такой сценарий в общем случае будет частью системы CI.