Как сбросить время последнего изменения каждого файла в репозитории git к времени последней фиксации

git ls-files | while read file; do echo $file; touch -t $(date -jf "%s" $(git log --date=local -1 --format="@%ct" "$file" | cut -b 2-) +%Y%m%d%H%M) "$file"; done


Команда git ls-files выводит список всех файлов, находящихся в репозитории Git. После этого используется конвейер | для передачи этого списка на вход цикла while read file. Внутри цикла каждый файл выводится на экран с помощью echo и затем к файлу применяется команда touch, чтобы установить время последнего изменения равным времени последнего фиксации этого файла в Git.

Команда git log --date=local -1 --format="@%ct" "$file" получает дату последней фиксации файла в формате Unix timestamp. Далее команда cut -b 2- обрезает первый символ из вывода, чтобы удалить символ @. Затем полученный Unix timestamp передается команде date -jf "%s" - +%Y%m%d%H%M", которая преобразует его в формат год-месяц-день-час-минута. Конечный результат этой команды подставляется в качестве аргумента команды touch, которая устанавливает новое время последнего изменения файла.

Если вместо этой команды, вы предпочтете использовать графический интерфейс, вы можете воспользоваться Git-клиентом, который предоставляет графический интерфейс пользователя. Например, GitHub Desktop или SourceTree. Такие клиенты позволяют управлять Git-репозиторием из оконного интерфейса без необходимости использовать командную строку.

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *