#! /bin/sh # See the discussion at https://stackoverflow.com/q/67724347/7976758 if [ -z "$1" ]; then echo "Usage $0 from_commit [to_commit]" exit 1 fi from_commit="$1" to_commit="${2:-HEAD}" export from_commit to_commit # In the superproject { git --no-pager diff --name-only "$from_commit" "$to_commit" git submodule foreach ' # In submodule "$name" prev_commit=`(git -C "$toplevel" ls-tree "$from_commit" "$sm_path" | awk "{print \\$3}")` curr_commit=`(git -C "$toplevel" ls-tree "$to_commit" "$sm_path" | awk "{print \\$3}")` git --no-pager diff --name-only $prev_commit $curr_commit '; } | { test -t 1 && ${PAGER:-less} || cat -; }