git-mtime is a Git extension that finds a last modified times through Git commits:
Git repositories provide records of deliberate updates through commit logs. By retrieving the last commit date for a specific file, we can find the last date a file was purposefully updated.
#!/bin/bash path="${@: -1}" dir=$(dirname "$path") hash=$(git -C "$dir" log \ --format="%ad %H" \ --date=format:"%s" \ --grep="\[date skip\]" \ --invert-grep \ -- $(basename "$path") |\ sort -r |\ awk '{ print $2 }' |\ head -n1) git -C "$dir" show --format="%ad" --quiet "${@:1:$#-1}" "${hash}"
Installation
Download git-mtime and symlink it to /usr/local/bin/git-mtime
:
curl --remote-name --silent https://raw.githubusercontent.com/jeffkreeftmeijer/git-mtime/main/git-mtime
ln -s $(realpath git-mtime) /usr/local/bin/git-mtime
Usage
Execute git mtime
with a path to a file in a Git repository:
git mtime file.txt
Mon Mar 6 18:24:11 2023 +0100
Even outside of the repository, git-mtime
can find the commit history and find a file’s last update date:
git mtime repository/file.txt
Mon Mar 6 18:24:11 2023 +0100
By relying on git-log
internally, git-mtime
supports Git’s --date
flag:
git mtime --date=format:"%F %R" repository/file.txt
2023-03-06 18:24
If a commit touches a file, but you don’t want to modify the file’s modified time, mark the commit with [date skip]
in its commit message to make git-mtime
ignore it:
echo "file.txt" >> repository/file.txt git -C repository add . git -C repository commit --quiet --message 'Fix file.txt' --message "[date skip]" ./git-mtime repository/file.txt
Mon Mar 6 18:24:11 2023 +0100