LINUX.ORG.RU

git clone и актуальные даты файлов

 


0

1

Делаю git clone с удалённого ресурса, и все файлы у меня получаются с текущей датой (now).

  1. Можно ли заставить git скачать даты файлов с сервера?
  2. Если нет, тогда как установить даты файлов равными датам их последних коммитов?

Why isn’t Git preserving modification time on files?

TL;DR: сохранение timestamp вредно и ненужно и ломает билд-системы.

А так только через попу и в присядку.

git ls-tree -r --name-only HEAD | while read filename; do
  echo "$(git log -1 --format="%ad" -- $filename) $filename"
done
beastie ★★★★★
()

Настрой автоматический git pull по таймеру, например через cron или аналоги. Тогда время модификации файла будет соответствовать времени коммита с точностью до частоты синхронизации.

annulen ★★★★★
()
Ответ на: комментарий от beastie

Слишком категоричное (и соответственно неверное) утверждение.

Сломаться там может только если ты сначала сделал сборку, потом обновил гитом до какой-то версии позже чем была и раньше чем собирал, и потом делаешь ещё одну инкрементальную сборку. Что собственно очень редкий сценарий использования, потому что большинству надо просто скачать исходники откуда-то, но vcs-маньяки допустим не дают скачать нормальный tgz-архив, а только предлагают качать через vcs. Вот тут то и хочется иногда скачать всё с нормальными датами.

firkax ★★★★★
()
Ответ на: комментарий от annulen

Да, представь себе, редкий. Подавляющее большинство тех, кто делает git clone - вовсе не разработчики, и гитом они пользуются только потому что не нашли где скачать тарболл.

firkax ★★★★★
()
Ответ на: комментарий от firkax

Подавляющее большинство тех, кто делает git clone - вовсе не разработчики, и гитом они пользуются только потому что не нашли где скачать тарболл.

Но это же не значит, что git должен подстраиваться под них, создавая проблемы для целевой аудитории.

annulen ★★★★★
()
Ответ на: комментарий от annulen

Разумеется не значит. Но говорить им что они хотят неправильного тоже не надо. У них свои задачи и ничего плохого в этом нет. Вон выше уже показали как добиться желаемого. Хотя я на месте авторов гита сделал бы ключ для этого (он никому не помешает).

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от firkax

гитом они пользуются только потому что не нашли где скачать тарболл

Я с прямо противоположной ситуацией обычно сталкиваюсь — люди скачивают с гит-хостингов архивы, вместо того, чтобы сделать git clone, а потом не понятно, какой коммит они скачали.

Где вообще в реальности такая ситуация встречается? Популярные гит-хостинги вроде github и gitlab позволяют скачать коммит в виде архива, и юзвери легко находят эту кнопку без посторонней помощи. А пользователи cgit и подобных обычно достаточно Ъ, чтобы где-то выложить нормальный тарболл и по-человески об этом написать.

annulen ★★★★★
()
Ответ на: комментарий от beastie

@beastie, благодарю! А как бы теперь эти даты прикрутить к файлам? touch не понимает этот формат даты:

$ touch -cd "Tue Nov 11 13:35:00 2008 -0600" "README"
touch: неверный формат даты «Tue, Nov 11 13:35:00 2008 -0600»

сохранение timestamp вредно и ненужно и ломает билд-системы

На данном этапе, моя задача–просто собрать тарбол некоего релиза с актуальными датами (и, возможно, с правками, которые нет необходимости сохранять в git).

Isica
() автор топика
Ответ на: комментарий от annulen

Популярные гит-хостинги вроде github и gitlab позволяют скачать коммит в виде архива, и юзвери легко находят эту кнопку без посторонней помощи

Да, но даты в этих архивах тоже не актуальные.

Isica
() автор топика
Ответ на: комментарий от Isica

Да, но даты в этих архивах тоже не актуальные.

Разумеется. Но эти даты обычно никому не нужны, зато по ним можно с некоторой точностью угадать исходный коммит

annulen ★★★★★
()
Ответ на: комментарий от Isica

git log -1 --format="%aI" … выдаст дату в ISO 8601 формате (2024-12-09T23:49:30+01:00), которую touch -d сожрать должен.

tl;dr:

git ls-tree -r --name-only HEAD | while read filename; do
  touch -ad $(git log -1 --format="%aI" -- $filename) $filename
done

PS: не проверял, но должно сработать.

ref: https://git-scm.com/docs/pretty-formats

beastie ★★★★★
()
Последнее исправление: beastie (всего исправлений: 1)