Объединив ответ Гюго (1) с информации, найденной здесь (2), и бросание в некоторых sed
, я получил это:
alias newest="find . -path ./.git -prune -o -type f -exec stat -c \"%y %n\" '{}' + | sort -r | head -1 | sed s#'.*\./'##"
GIT_AUTHOR_DATE="$(newest | xargs date -u -r)" GIT_COMMITTER_DATE="$(newest | xargs date -u -r)" git commit -m "Old sources retaining old change-dates of last changed file: $(newest), actual commit date: $(date)"
Основное отличие заключается в том, что эта версия делает рекурсивный поиск, поэтому вы получаете самый последний файл в любом месте дерева - хотя он и предсказуемо пропускает каталог .git.
Вы можете, конечно, отказаться от одной из переменных даты здесь, и я использую довольно недавнюю версию bash (4.2.37 (1) -release), поэтому нотация $() может не работать для вас (вместо этого замените его backticks (`)).
Вы пытались сменить часы? =) Я бы подумал, что это должно работать локально, но не уверен, что произойдет, когда другие пойдут на слияние. – Kieveli 2008-12-15 02:28:29
Временные метки не относятся к слияниям. – Dustin 2008-12-15 04:31:44