git восстанавливать время файла при клонировании
От: 00011011  
Дата: 31.01.22 07:59
Оценка:
Подскажите пожалуйста, как заставить git (или tortoisegit) при клонировании устанаваливать время файла равным времени последней модификации (т.е. времени коммита), а не текущему времени?
Есть репозиторий в гитлабе, смотрю через веб интерфейс — там допустим файлу 2 года, клонирую проект — файл имеет текущую дату и время. Мне нужно чтобы при клонировании восстановились оригинальные времена файлов.
Re: git восстанавливать время файла при клонировании
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 31.01.22 08:12
Оценка:
Здравствуйте, 00011011, Вы писали:

0>Подскажите пожалуйста, как заставить git (или tortoisegit) при клонировании устанаваливать время файла равным времени последней модификации (т.е. времени коммита), а не текущему времени?

0>Есть репозиторий в гитлабе, смотрю через веб интерфейс — там допустим файлу 2 года, клонирую проект — файл имеет текущую дату и время. Мне нужно чтобы при клонировании восстановились оригинальные времена файлов.

Чем обсуждения тут недостаточно?
The God is real, unless declared integer.
Re[2]: git восстанавливать время файла при клонировании
От: 00011011  
Дата: 31.01.22 08:19
Оценка:
Здравствуйте, netch80, Вы писали:

N>Чем обсуждения тут недостаточно?


Оно там для линукса, а мне нужно для винды
Они предлагают некие странные скрипты, но неужели в гите нет простой человеческой настройки, в которой можно указать какую дату использовать?
Re[3]: git восстанавливать время файла при клонировании
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 31.01.22 08:30
Оценка:
Здравствуйте, 00011011, Вы писали:

0>Здравствуйте, netch80, Вы писали:


N>>Чем обсуждения тут недостаточно?


0>Оно там для линукса, а мне нужно для винды


Powershell справится.

0>Они предлагают некие странные скрипты, но неужели в гите нет простой человеческой настройки, в которой можно указать какую дату использовать?


В одном из ответов объяснено, почему это не делается по умолчанию.
The God is real, unless declared integer.
Re[3]: git восстанавливать время файла при клонировании
От: halo Украина  
Дата: 31.01.22 17:55
Оценка:
Здравствуйте, 00011011, Вы писали:

0>Здравствуйте, netch80, Вы писали:


N>>Чем обсуждения тут недостаточно?


0>Оно там для линукса, а мне нужно для винды


Не "для линукса". Вместе со стандартным Git под Windows с ним тянется всё, что нужно для его работы, а там порты и coreutils, и bash, и всякие sort/sed/awk и вроде, как даже, perl. В Git также предусмотрены хуки, к одному из которых можно привинтить тот микроскрипт. Хук "для линукса" будет работать даже под Windows 7, если сделать git checkout из cmd, Far Manager и т.д.

Как работают именно те скрипты, я пока не разбирался, но, вот это, на первый взгляд, должно работать. Я, правда, посмотрел бы ещё есть ли смысл разносить %aI и %cI на разные аттрибуты файлов при touch (если это возможно). Скорее всего, git checkout из-за такого хука станет заметно тормознее.

0>Они предлагают некие странные скрипты, но неужели в гите нет простой человеческой настройки, в которой можно указать какую дату использовать?


Потому что в git время хранится не для блобов и деревьев (т.е., "файлов и директорий"), а для фиксациий, причём как минимум в двух значениях: author date и committer date.

----

Вообще, если очень уж нужно, то можно сделать так:

— посмотреть результат git --exec-path: в эту директорию положить тот скрипт, назвав его, например, git-reset-timestamps, не забыв прописать шебанг #!/bin/bash в начале файла (таким образом это "станет" отдельной командой git, причём даже автокомплит в терминале должен был бы уметь распознать присутствие git reset-timestamps);
— в сам скрипт можно добавить проверку, не запускается ли он хуком напрямую (есть ли в родителях git-процесс), и если да, то проверять флажок, явно разрешающий бы запуск такой дорогой операции из хука, условный "core.resetTimestampsOnCheckout" (см. git-config, переменные окружения, замещение флажка с помощью git -c group.key=value <command> и т.д.)
— в репозиторях сделать вручную git reset-timestamps в случае необходимости;
— просто прописать вызов git reset-timestamps в .git/hooks/post-checkout для тех репозиториев, где это нужно, а тогда или запустить сброс временных меток вручную или косвенно с помощью какого-либо git checkout HEAD ("слесть с ветки" в detached HEAD) и git checkout - (обратно на предыдущую ветку (обозначено символом "минус")).
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.