Подскажите пожалуйста, как заставить git (или tortoisegit) при клонировании устанаваливать время файла равным времени последней модификации (т.е. времени коммита), а не текущему времени?
Есть репозиторий в гитлабе, смотрю через веб интерфейс — там допустим файлу 2 года, клонирую проект — файл имеет текущую дату и время. Мне нужно чтобы при клонировании восстановились оригинальные времена файлов.
Здравствуйте, 00011011, Вы писали:
0>Подскажите пожалуйста, как заставить git (или tortoisegit) при клонировании устанаваливать время файла равным времени последней модификации (т.е. времени коммита), а не текущему времени?
0>Есть репозиторий в гитлабе, смотрю через веб интерфейс — там допустим файлу 2 года, клонирую проект — файл имеет текущую дату и время. Мне нужно чтобы при клонировании восстановились оригинальные времена файлов.
Чем обсуждения
тут недостаточно?
Здравствуйте, netch80, Вы писали:
N>Чем обсуждения тут недостаточно?
Оно там для линукса, а мне нужно для винды
Они предлагают некие странные скрипты, но неужели в гите нет простой человеческой настройки, в которой можно указать какую дату использовать?
Здравствуйте, 00011011, Вы писали:
0>Здравствуйте, netch80, Вы писали:
N>>Чем обсуждения тут недостаточно?
0>Оно там для линукса, а мне нужно для винды
Powershell справится.
0>Они предлагают некие странные скрипты, но неужели в гите нет простой человеческой настройки, в которой можно указать какую дату использовать?
В одном из ответов объяснено, почему это не делается по умолчанию.
Здравствуйте, 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 - (обратно на
предыдущую ветку (обозначено символом "минус")).