git: Datei-Zeitstempel auf Datum des letzten Commit setzen

Git setzt beim Auschecken der Files das Schreibdatum auf die aktuelle Zeit. In der Entwicklung z.B. ist das wohl meist das richtige Vorgehen. In (mindestens) einem meiner Repositories bevorzuge ich es aber, wenn die Files das Datum ihrer letzten Änderung tragen würden.

Ein kleines Skript setzt alle Dateien auf das Datum des jeweiligen letzten commits:

#!/bin/bash
#
# git-touch-as-last-commit.sh
#
# touch all files with the time of their last commit
#
# DSTK 2016-03

git ls-tree -r $(git rev-parse --abbrev-ref HEAD) --name-only \
| while read file ; do
    echo "$file"
    touchtime=$(git log -n 1 --pretty=format:%ct --  "$file" | gawk '{print strftime("%Y%m%d%H%M.%S", $0)}')
    touch -t $touchtime "$file"
done
  • Ist nicht schnell, aber für mich reicht’s.
  • Funktioniert auch mit Files, die Leerzeichen etc. im Dateinamen haben.
  • TODO: Check if anything has to be done about timezones

One thought on “git: Datei-Zeitstempel auf Datum des letzten Commit setzen

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert