Restore the modificaton time of a list of files to the author date of the their last commit with
gitmtim(){ local f;for f;do touch -d @0`git log --pretty=%at -n1 -- "$f"` "$f"; done;}; gitmtim configure.ac
It will not change directories recursively, though.
If you want to change a whole working tree, e.g. after a fresh clone or checkout, you may try
git log --pretty=%at --name-status --reverse | perl -ane '($x,$f)=@F;next if !$x;$t=$x,next if !defined($f)||$s{$f};$s{$f}=utime($t,$t,$f),next if $x=~/[AM]/;'
NB: I grepped for utime in builtin/clone.c and got no matches.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…