Skip to content

Instantly share code, notes, and snippets.

@mixu
Created September 4, 2014 21:02
Show Gist options
  • Save mixu/dbca40ec642ee652136e to your computer and use it in GitHub Desktop.
Save mixu/dbca40ec642ee652136e to your computer and use it in GitHub Desktop.
Find oldest files in a git repo
git ls-tree -r --name-only HEAD | while read filename; do
echo "$(git log -1 --format="%at | %h | %an | %ad |" -- $filename) $filename"
done
@mspncp
Copy link

mspncp commented Nov 11, 2022

Unfortunately, it also fails with non-ascii characters in the filename:

~/example$ tree
.
├── ä_ö_ü.txt
└── foo bar baz.txt

0 directories, 2 files
~/example$ git ls-tree -r HEAD
100644 blob 924665ce4c939bd9fdbfec512cdf379f0c8696c4	foo bar baz.txt
100644 blob 6718a7cf7fb4f41ea7ed4aefad5dd1946a9bb2b4	"\303\244_\303\266_\303\274.txt"

@chucker
Copy link

chucker commented May 15, 2023

If you want to handle cases where a file has been renamed but not otherwise modified since (and in those cases see the time stamp before the rename), add:

--follow --diff-filter=r

This looks for renames (--follow), then filters them out (lower-case r).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment