OLD=v0.99~584 NEW=v0.99~583 # make dirs git-diff-tree -r --diff-filter=AM --name-only $OLD..$NEW | while read name; do dirname "$name" done | sort | uniq | while read dir; do while test . != "$dir" && ! git show $OLD:"$dir" > /dev/null 2>&1; do echo "mkdir $dir" dir="$(dirname "$dir")" done done # upload modified and added files git-diff-tree -r --diff-filter=AM --name-only $OLD..$NEW | while read name; do echo "upload $name" done # remove deleted files git-diff-tree -r --diff-filter=R --name-only $OLD..$NEW | while read name; do echo "remove $name" done # remove dirs git-diff-tree -r --diff-filter=R --name-only $OLD..$NEW | while read name; do dirname "$name" done | sort -r | uniq | while read dir; do while test . != "$dir" && ! git show $NEW:"$dir" > /dev/null 2>&1; do echo "rmdir $dir" dir="$(dirname "$dir")" done done