1066 shaares
611 private links
611 private links
Number of commits in a git repo can be used as a quick-and-dirty proxy of amount of development time spent in a repo. For variations on this theme, see my previous linkpost.
Here's the bash one-liner I wrote and a few lines of its output:
taha@luxor:~
$ THISPATH="/media/bay/taha/projects/ansible/pub/roles"; find "$THISPATH" -maxdepth 2 -iname ".git" -type d -exec bash -c \
"git -C {} rev-list --count --all | tr '\n' '\t'; echo -e ' ${BGreen}${On_Black}{}${Color_Off}' | \
sed 's+/.git++' | sed 's+$THISPATH/++'" \; | sort -n --reverse -
91 dotfiles
42 R
39 lxd-server
36 python3
36 i3wm
Explainer
- We will look for git repos inside the
/media/bay/taha/projects/ansible/pub/rolesdirectory, and since this path needs to be referenced twice more in the command we can DRY by defining a local var$THISPATH. - some roles may contain git submodules, so to avoid including them here we limit depth to only include the top-level
.gitdirectory (which is 2 levels down from the search path). - get the number of commits (across all branches and authors) for each repo.
trreplaces the trailing newline (introduced by output fromgit -C ...) with a tab so that number and repo name (which we print next) show on the same line.echo -e ' {}'the name of the current repo. I added some colouring for flourish.- to save on repitition in the output replace full path returned by
findby stripping the trailing.gitpart as well as the dirname part. Note that this is just my cosmetic preference. - sort by numeric value
-nand list in--reverseorder. Note the trailing dash which references the output from before the pipe.